matplotlib 如何在日期时间轴上显示误差线?

1qczuiv0  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(157)

我正试图绘制一个沿着时间轴的误差条图,理想情况下,误差上限/下限是可调的。我一直使用datetime.datetime数据类型来实现这一点,在我尝试使用matplotlib.pyplot.errorbar()实现误差条之前,它一直是可靠的。

import matplotlib.pyplot as plt
from datetime import datetime
import numpy as np

dates = [datetime(1950,2,2,12),datetime(1950,2,2,15)]
data = [1,2]
date_err = [[datetime(1950,2,2,11,30),datetime(1950,2,2,14,30)], #arbitrary random dates/times
            [datetime(1950,2,2,12,30),datetime(1950,2,2,15,30)]]
test_err = [2,3]
fig, (ax1,ax2) = plt.subplots(2,1)
ax1.plot(dates,data,'k.')
ax1.tick_params(rotation = 45)
plt.subplots_adjust(hspace = 0.5)
ax2.errorbar(dates,data,xerr = test_err) #I tried both with date_err and test_err
ax2.errorbar(dates,data,xerr = date_err)

这给出了图:

我尝试使用列表形状(2,N),格式为[[low1,low2...lowN],[high1,high2...highN]],数据类型为datetime. datetime(),但收到错误:
TypeError:不受支持的操作数类型 *:'int'和'datetime. datetime'
当使用像test_err这样的整数/浮点数时,我得到错误:
TypeError:不支持+的操作数类型:'datetime. datetime'和'int'
有没有人能提出一种用日期/时间绘图的替代方法,或者一种沿着时间轴实现误差线的方法?谢谢你!

kuarbcqp

kuarbcqp1#

您可以使用timedelta作为错误。我不知道你想要的错误是什么,但你可以很容易地调整它。

import matplotlib.pyplot as plt
from datetime import datetime, timedelta

plt.close("all")

dates = [datetime(1950, 2, 2, 12), datetime(1950, 2, 2, 15)]
data = [1, 2]
test_err = [timedelta(minutes=30), timedelta(hours=2)]

fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.plot(dates, data, 'k.')
ax2.errorbar(dates, data, xerr=test_err, capsize=3)
ax1.tick_params(rotation=45)
ax2.tick_params(rotation=45)
fig.tight_layout()
fig.show()

u7up0aaq

u7up0aaq2#

我猜你想要timedelta

from datetime import datetime, timedelta

test_err = [timedelta(hours=2), timedelta(hours=3)]
ax2.errorbar(dates, data, xerr=test_err)

输出:

相关问题