【问题标题】:Creating Patches when x-axis uses datetime coordinates当 x 轴使用日期时间坐标时创建补丁
【发布时间】: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   
...

其中一个图的想法是将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 字段如何与其他字段同时变化。

我的想法是使用来自matplotlib.PatchesRectangle 补丁来完成此着色。由于我将绘图的边界建立在TMPDPT 的轨迹上,所以我总是会确切地知道补丁的高度是多少,并且我也总是知道它的左边界和它的宽度 - 但是皱纹是我在datetime 坐标中认识它们,而不是在 x-y 坐标中。所以,如果bnd_left 是左边界,因为datetimeyloheight 是浮点数,而widthdatetime.timedelta,我正在尝试制作一个类似的补丁,

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

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

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

【问题讨论】:

    标签: python matplotlib pandas


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多