当x轴使用日期时间坐标时创建补丁

时间:2013-10-02 21:44:38

标签: python matplotlib pandas

我根据我在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对应的着色之上叠加DPTdata['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.PatchesTMP的痕迹绘制了情节的界限,所以我总是知道补丁的高度是什么,我也总是知道它的左边界和它的宽度 - 但皱纹是我在DPT坐标中知道它们,而不是在xy坐标中。因此,如果datetime左侧边界为bnd_leftdatetimeylo为浮点数,heightwidth,我就是我试图制作像这样的补丁,

datetime.timedelta

但这不起作用。当补丁尝试创建自己时,有一个shading_patch = Rectangle([bnd_left, ylo], width, height) ,因为无法添加TypeErrorfloat。在文档中,当我创建我正在尝试的跟踪时,我找不到有关如何将datetime.timedelta坐标转换为我使用datetime方法创建的绘图的原生变换中的浮点数的任何内容在下面画画。

是否有任何简单的方法可以在使用DataFrame.plot()生成的图上绘制补丁?

1 个答案:

答案 0 :(得分:1)

好的,在进行了一些更简单的挖掘后,使用axvspan方法。但是有一个警告。在Pandas v.1.12中,如果使用DataFrame属性切换Timeseries.ix,出于某种奇怪的原因,您将格式化为x轴日期。绘图时,必须使用my_dataframe.plot(ax=ax, x_compat=True)进行绘图并自行配置刻度,否则axvspan的阴影将无效。