【问题标题】:datetime plot with errorbars in pandas大熊猫中带有误差线的日期时间图
【发布时间】:2015-01-19 13:22:37
【问题描述】:

我正在尝试绘制一个数据帧,它的日期时间索引带有 x- 和 y 错误。

考虑以下最小示例,我想要 1/2 天的误差线,因为数据在此范围内分箱:

from pandas import DataFrame
import numpy as np
import datetime

start = np.datetime64("2014-01-1")
stop = start + np.timedelta64(100, "D")

df = DataFrame()
df["y"] = np.random.normal(0, 1, 100)
df.index = np.arange(start, stop)
df["y"].plot()

但我尝试的一切都会导致错误,例如

xerr = np.timedelta64(0.5, "D")
xerr = np.timedelta64(12, "h")
xerr = datetime.timedelta(days=0.5)

那么我怎样才能实现长度为 1/2 天的误差线?

【问题讨论】:

    标签: datetime numpy matplotlib pandas


    【解决方案1】:

    仅使用pandas.DataFrame.plot(xerr=),只要pandas.TimedeltaDatetimeIndex Freq 的单位相同,误差条就会起作用。

    我从下面的代码中得到了 2 个我认为你想要的表格:

    from pandas import DataFrame, date_range, Timedelta
    import numpy as np
    
    rng = date_range(start='2014-01-01', periods=5, freq='24H')
    df = DataFrame({'y':np.random.normal(size=len(rng))}, index=rng)
    terr = Timedelta(hours=12)
    ax = df['y'].plot(xerr=len(df)*[terr])
    
    
    rng2 = date_range(start='2014-01-01', periods=5, freq='D')
    df2 = DataFrame({'y':np.random.normal(size=len(rng))}, index=rng)
    terr2 = Timedelta(days=0.5)
    ax2 = df2['y'].plot(xerr=len(df2)*[terr2])
    

    【讨论】:

      【解决方案2】:

      不确定是否可以使用pandas.DataFrame.plot() 方法。 直接拨打matplotlib即可:

      from pandas import DataFrame, date_range, Timedelta
      import numpy as np
      import matplotlib.pyplot as plt
      
      rng = date_range(start='2014-01-01', periods=100, freq='D')
      df = DataFrame({'y':np.random.normal(size=len(rng))}, index=rng)
      
      terr = Timedelta(hours=12)
      yerr = 0.05
      
      fig, ax = plt.subplots()
      ax.errorbar(df.index, df.y, xerr=terr)
      

      【讨论】:

      • 谢谢,我知道。但后来我没有得到格式良好的 xticklabels 每月刻度和 1 月以下的年份
      • 我确实找到了直接的pandas 解决方案。我已将其添加为另一个答案。如果可以减少混乱,我很乐意删除它。
      猜你喜欢
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多