【发布时间】:2013-10-02 21:44:37
【问题描述】:
我正在根据我保存在 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”,那么块 2010-10-01 19:30:00-2010-10-01 22:30:00可能是较深的颜色,这样我可以看到 CLD 字段如何与其他字段同时变化。
我的想法是使用来自matplotlib.Patches 的Rectangle 补丁来完成此着色。由于我将绘图的边界建立在TMP 和DPT 的轨迹上,所以我总是会确切地知道补丁的高度是多少,并且我也总是知道它的左边界和它的宽度 - 但是皱纹是我在datetime 坐标中认识它们,而不是在 x-y 坐标中。所以,如果bnd_left 是左边界,因为datetime、ylo 和height 是浮点数,而width 是datetime.timedelta,我正在尝试制作一个类似的补丁,
shading_patch = Rectangle([bnd_left, ylo], width, height)
但这不起作用。当补丁尝试创建自己时,会出现TypeError,因为无法添加float 和datetime.timedelta。在文档中,我找不到任何关于如何将datetime 坐标转换为浮点数的信息,我在创建要在下面绘制的轨迹时使用DataFrame.plot() 方法创建的绘图的本机转换。
有没有什么简单的方法可以在DataFrame.plot() 生成的图上绘制补丁?
【问题讨论】:
标签: python matplotlib pandas