如何在matplotlib中绘制时间序列图上的水平条

2024-04-26 02:23:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在matplotlib中有以下数据和图表:

chart_ts = [datetime(2013, 1, 1, 17, 0),
 datetime(2013, 1, 1, 17, 1),
 datetime(2013, 1, 1, 17, 2),
 datetime(2013, 1, 1, 17, 3),
 datetime(2013, 1, 1, 17, 4),
 datetime(2013, 1, 1, 17, 5),
 datetime(2013, 1, 1, 17, 6),
 datetime(2013, 1, 1, 17, 7),
 datetime(2013, 1, 1, 17, 8),
 datetime(2013, 1, 1, 17, 9)]

chart_close = [1.32034,
 1.32046,
 1.3205,
 1.32025,
 1.32025,
 1.32026,
 1.32034,
 1.32035,
 1.32035,
 1.32063]

mp_close = [1.320060, 1.320055, 1.320050, 1.320045, 1.320040, 1.320035, 1.320030, 1.320025]
mp_value = [5, 6, 8, 10, 3, 5, 6, 2]

%matplotlib inline
mpl.rcParams['interactive'] = False
mpl.rcParams['figure.figsize'] = (8, 8.0)

# plot
plt.plot(chart_ts,chart_close)
plt.gcf().autofmt_xdate()
plt.show()

通过运行以上代码,我得到以下结果:

Chart1

到目前为止,还不错。你知道吗

现在我想在第一个图表上画出mp\u close和mp\u value作为水平条。 期望的结果是这样的(它只是一个手绘模型,而不是一个精确的比例表示):

Chart2

但是如果我只是添加新的绘图,我发现用于两个图表的X轴是不一样的。我该如何达到这个结果?

在@importanceofbeingernest评论之后,我尝试了以下方法:

chart_ts = [datetime(2013, 1, 1, 17, 0),
 datetime(2013, 1, 1, 17, 1),
 datetime(2013, 1, 1, 17, 2),
 datetime(2013, 1, 1, 17, 3),
 datetime(2013, 1, 1, 17, 4),
 datetime(2013, 1, 1, 17, 5),
 datetime(2013, 1, 1, 17, 6),
 datetime(2013, 1, 1, 17, 7),
 datetime(2013, 1, 1, 17, 8),
 datetime(2013, 1, 1, 17, 9)]

chart_close = [1.32034,
 1.32046,
 1.3205,
 1.32025,
 1.32025,
 1.32026,
 1.32034,
 1.32035,
 1.32035,
 1.32063]

mp_close = [1.320060, 1.320055, 1.320050, 1.320045, 1.320040, 1.320035, 1.320030, 1.320025]
mp_value = [5, 6, 8, 10, 3, 5, 6, 2]

%matplotlib inline
mpl.rcParams['interactive'] = False
mpl.rcParams['figure.figsize'] = (8, 8.0)

# plot
fig, ax1 = plt.subplots()

ax1.plot(chart_ts,chart_close)
plt.gcf().autofmt_xdate()

ax2 = ax1.twiny()
ax2.barh(mp_close, mp_value, align='center')

plt.show()

但我得到:

Chart3

现在我怀疑我很快就要得到它了,但我会错过:

  • 如何水平缩放第二个图表,例如,图表右侧的最大值为20。你知道吗
  • 单杠的宽度似乎太宽了。你知道吗

对于酒吧的宽度,我试过:

ax2.barh(mp_close, mp_value, align='center', width=0.00003)

但我得到:

TypeError: barh() got multiple values for argument 'width'

Tags: closedatetimeplotmatplotlibvaluechart图表plt