python - Seaborn Scatter 中一行的图形部分
问题描述
我有一个数据框,它是由日期时间索引的列,我想在 Seaborn 的列中散点图由日期时间索引的每一行的一部分。我不知道如何做到这一点并使它看起来可读。
我曾尝试在 x 和 y 轴上使用 loc 和 iloc 进行 scatter 调用,但我无法让它绘制。
df = pd.DataFrame({'123': ['20.908', 8.743, 8.34, 2.4909],
'124': ["2", 2.34, 0, 4.1234],
'412': ["3", 20.123, 3.123123, 0],
'516': ["5", 20.123, 3.123123, 0],
'129': ["10", 20.123, 3.123123, 0]},
index=['2015-01-10', '2015-02-10', '2015-03-10', '2015-04-10'])
df2 = df.transpose()
df2 是我想要绘制的数据框,尽管两者都可以。
所需的输出是每行的散点图,其中 x 按时间索引,y 是行值。
解决方案
有点猜测,但是...
df = pd.DataFrame({'123': [20.908, 8.743, 8.34, 2.4909],
'124': [2, 2.34, 0, 4.1234],
'412': [3, 20.123, 3.123123, 0],
'516': [5, 20.123, 3.123123, 0],
'129': [10, 20.123, 3.123123, 0]},
index=['2015-01-10', '2015-02-10', '2015-03-10', '2015-04-10'])
# Melt & set index as datetime
df = df.reset_index().melt(id_vars='index', var_name='col', value_name='value').set_index('index')
df = df.set_index(pd.DatetimeIndex(df.index))
# Select data to plot by slicing datetime index
df_plot = df.loc[(df.index > pd.Timestamp('2015-02-01'))
& (df.index < pd.Timestamp('2015-04-30'))]
# Plot
sns.scatterplot(data=df_plot,
x=df_plot.index.to_native_types(),
# Use to_native_types to handle datetime index
y='value',
hue='col',
palette=sns.color_palette("Set1", df_plot['col'].nunique()))
# Specify palette & number of colors to
# handle values stored as strings
# (seemingly a seaborn bug)
请注意,seaborn 不能很好地处理日期,并且有比这个答案更好的处理日期时间轴的方法。参见,例如,这个问题及其答案。
推荐阅读
- ios - 从 Firebase 加载图像时,集合视图单元格顺序发生变化
- javascript - 打印区域在打印 js 中无法正常工作
- java - 删除每个出现超过“N”次问题的元素
- python - 如何仅提取看起来像手写的轮廓?
- android - getParcelable 在发布模式下崩溃,但在通过 android studio 安装时工作正常
- java - 如何减少 Java 中的已提交内存使用量
- spartacus-storefront - 在 SAP Spartacus 中找不到名称“DirectionConfig”
- c# - 使用 WPF 从自定义 JSON 显示 TreeView
- https - 在 ISPConfig 3 中切换到 HTTPS 后出现空白主页和 404
- tensorflow - 如何将经过训练的 TF1 protobuf 模型加载到 TF2 中?