0

我正在根据我保存在 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   
...

其中一个图的想法是将TMPDPT字段的轨迹(通过使用 生成)覆盖在对应于字段data['TMP'].plot()的阴影之上。CLD因此,例如,之间的时间块2010-10-01 18:00:00-2010-10-01 19:30:00可能是浅灰色,如果下一个条目CLD不是“CL”,那么块2010-10-01 19:30:00-2010-10-01 22:30:00可能是较深的颜色,这样我可以看到CLD字段如何变化与其他领域同时进行。

我的想法是使用一个Rectangle补丁matplotlib.Patches来完成这种着色。由于我将绘图的边界建立在 and 的轨迹上TMPDPT所以我总是会确切地知道补丁的高度是多少,而且我也总是知道它的左边界和它的宽度 - 但皱纹是我知道的它们在datetime坐标中,而不是在 xy 坐标中。所以,如果bnd_left左边界是 a datetimeylo并且height是浮动的,并且width是 a datetime.timedelta,我正在尝试制作一个像这样的补丁,

shading_patch = Rectangle([bnd_left, ylo], width, height)

但这不起作用。当TypeError补丁尝试创建自己时,因为无法添加 afloat和 a datetime.timedelta。在文档中,我找不到任何关于如何将坐标转换为浮点数的信息,我在创建要在下面绘制的轨迹时datetime使用该方法创建的绘图的本机转换。DataFrame.plot()

有什么简单的方法可以在生成的图上绘制补丁DataFrame.plot()吗?

4

1 回答 1

1

好的,经过更多挖掘后,出现了一个更简单的解决方案 - 使用该axvspan方法。不过,有一个警告。在 Pandas v. 0.12 中,如果您通过 aDataFrameTimeseries使用该.ix属性进行切片,出于某种奇怪的原因,您会将格式设置为 x 轴日期。绘图时,您必须my_dataframe.plot(ax=ax, x_compat=True)自己绘制并配置刻度,否则阴影axvspan将不起作用。

于 2013-10-02T23:48:35.710 回答