无法在Python中绘制条形图

时间:2018-11-27 21:52:49

标签: python dataframe matplotlib plot graph

这是一个分为两部分的问题。我有一组按日期时间索引索引的数据:

     DateTime,  ClosedPL,  MaxClosedDraw,   Max,  MaxDrawPerPeriod
1/6/2012 10:52,     -7350,         -20643,     0,                 0
1/6/2012 12:00,         0,         -20643,     0,                 0
1/6/2012 14:09,         0,         -20643,     0,                 0
1/6/2012 14:29,         0,         -20643,     0,                 0
1/6/2012 14:30,         0,         -20643,     0,            -20643
1/8/2012 18:00,         0,              0,   882,                 0
1/9/2012 8:59,          0,           -924,   882,                 0
1/9/2012 9:00,          0,          -1155,   882,                 0
1/9/2012 10:00,         0,          -3423,   882,                 0
1/9/2012 11:03,         0,          -3549,   882,                 0
1/9/2012 12:10,         0,          -3549,   882,                 0
1/9/2012 13:27,         0,          -3549,   882,                 0
1/9/2012 14:17,      3250,          -3549,   882,             -3549
1/9/2012 14:26,         0,              0,  1218,                 0
1/9/2012 14:29,     -1254,          -3318,  1218,                 0
1/9/2012 14:30,         0,          -3318,  1218,                 0
1/9/2012 18:02,         0,          -3654,  1218,             -3654
1/10/2012 8:22,      1244,              0,  6426,                 0
1/10/2012 9:00,         0,          -1869,  6426,                 0
1/10/2012 9:37,         0,          -2856,  6426,                 0
1/10/2012 10:00,        0,          -3276,  6426,                 0 

我试图在同一张图上创建两个图-1条折线图,显示了closedPL和由条形图表示的MaxDrawPerPeriod之一。 X轴将是日期时间索引。我希望条形图沿着图形的底部运行,但高度限制,以免真正干扰线形图。因此,第1部分将是如何添加到图表中,而第2部分如下:

stats_df.plot(kind='line', y='ClosedPL_Accum')
stats_df.plot(kind='bar', y='MaxDrawPerPeriod')
plt.show()

由于某些原因-即使单独运行条形图,我也无法使其正确运行。这就是它的样子,仅需10分钟即可完成。我使用我的代码做错了吗? enter image description here

1 个答案:

答案 0 :(得分:1)

您正在创建的条形数量与数据框中的线条数量一样多。每个标签都有自己的标签,因此总的来说变得不可读。对于您要寻找的绘图类型,将需要使用matplotlib。如果尚未将索引转换为日期时间,则需要将其转换为bar。然后创建一个双轴axtwin = ax.twinx(),并为其绘制线图。或相反亦然。

import matlotlib.pyplot as plt

fig, ax = plt.subplots()

ax.bar(df.index, df['MaxDrawPerPeriod'])
axtwin = ax.twinx()
axtwin.plot(df.index, df['ClosedPL_Accum'])

ax.set_ylim(...)     # you need to set the limits to the numbers you need
axtwin.set_ylim(...)

plt.show()