我根据我在pandas DataFrame中保存的数据生成一些图表;这个数据(称之为data
)的快照如下所示:
CIG CLD DPT OBV P06 P12 POS POZ Q06 Q12 TMP \
2010-10-01 18:00:00 8 CL 54 N NaN NaN 0 0 NaN NaN 85
2010-10-01 21:00:00 8 CL 50 N NaN NaN 0 0 NaN NaN 89
2010-10-02 00:00:00 8 CL 51 N 0 NaN 0 0 0 NaN 81
2010-10-02 03:00:00 8 CL 52 N NaN NaN 0 0 NaN NaN 67
2010-10-02 06:00:00 8 CL 52 N 0 NaN 0 0 0 NaN 62
2010-10-02 09:00:00 8 CL 51 N NaN NaN 0 0 NaN NaN 59
...
其中一个图表的想法是在TMP
对应的着色之上叠加DPT
和data['TMP'].plot()
字段的跟踪(使用CLD
生成)领域。例如,2010-10-01 18:00:00
- 2010-10-01 19:30:00
之间的时间块可能是浅灰色,如果CLD
的下一个条目不是“CL”,那么块{ {1}} - 2010-10-01 19:30:00
可能颜色较深,这样我就可以看到2010-10-01 22:30:00
字段与其他字段同时发生的变化。
我的想法是使用CLD
中的Rectangle
补丁来完成此着色。因为我基于matplotlib.Patches
和TMP
的痕迹绘制了情节的界限,所以我总是知道补丁的高度是什么,我也总是知道它的左边界和它的宽度 - 但皱纹是我在DPT
坐标中知道它们,而不是在xy坐标中。因此,如果datetime
左侧边界为bnd_left
,datetime
和ylo
为浮点数,height
为width
,我就是我试图制作像这样的补丁,
datetime.timedelta
但这不起作用。当补丁尝试创建自己时,有一个shading_patch = Rectangle([bnd_left, ylo], width, height)
,因为无法添加TypeError
和float
。在文档中,当我创建我正在尝试的跟踪时,我找不到有关如何将datetime.timedelta
坐标转换为我使用datetime
方法创建的绘图的原生变换中的浮点数的任何内容在下面画画。
是否有任何简单的方法可以在使用DataFrame.plot()
生成的图上绘制补丁?
答案 0 :(得分:1)
好的,在进行了一些更简单的挖掘后,使用axvspan
方法。但是有一个警告。在Pandas v.1.12中,如果使用DataFrame
属性切换Timeseries
或.ix
,出于某种奇怪的原因,您将格式化为x轴日期。绘图时,必须使用my_dataframe.plot(ax=ax, x_compat=True)
进行绘图并自行配置刻度,否则axvspan
的阴影将无效。