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.Timedelta
与 DatetimeIndex
频率的单位相同,误差线就可以工作。
我从下面的代码中得到了我认为你想要的形式的 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])
我正在尝试绘制一个日期时间索引带有 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.Timedelta
与 DatetimeIndex
频率的单位相同,误差线就可以工作。
我从下面的代码中得到了我认为你想要的形式的 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])