pandas 中带有误差线的日期时间图

datetime plot with errorbars in pandas

我正在尝试绘制一个日期时间索引带有 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 天的误差线呢?

不确定是否可以使用 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)

仅使用 pandas.DataFrame.plot(xerr=),只要 pandas.TimedeltaDatetimeIndex 频率的单位相同,误差线就可以工作。

我从下面的代码中得到了我认为你想要的形式的 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])