尝试使用plt.subplot绘制多个条形图

时间:2019-05-23 11:19:00

标签: python matplotlib plot bar-chart subplot

我创建了三个条形图。我想使用非常流行的无花果ax = plt.subplots函数将它们绘制在一起。我不能让它们正确地绘制在一起,但是当我分别在下面运行每一行时,我可以让它们单独显示

ax1 = buyreturns['return30'].plot.bar(grid=True, color=(buyreturns['return30'] > 0).map({True: 'g', False: 'r'}))
ax2 = buyreturns['return60'].plot.bar(grid=True, color=(buyreturns['return60'] > 0).map({True: 'g', False: 'r'}))
ax3 = buyreturns['return90'].plot.bar(grid=True, color=(buyreturns['return90'] > 0).map({True: 'g', False: 'r'}), legend = x)

我想使用无花果ax = plt.subplots函数将它们堆叠在一起显示。

我尝试了以下代码,返回的视觉效果是所有三个条形图的合并,请参见下面的第一张图片

fig, (ax1, ax2, ax3) =  plt.subplots(3, 1, sharex=False, sharey= False, figsize=(24,16)) 

ax1 = buyreturns['return30'].plot.bar(grid=True, color=(buyreturns['return30'] > 0).map({True: 'g', False: 'r'}))
ax2 = buyreturns['return60'].plot.bar(grid=True, color=(buyreturns['return60'] > 0).map({True: 'g', False: 'r'}))
ax3 = buyreturns['return90'].plot.bar(grid=True, color=(buyreturns['return90'] > 0).map({True: 'g', False: 'r'}), legend = x)

plt.show()

我也尝试了以下代码,它返回第二张图片中的内容。

fig, (ax1, ax2, ax3) =  plt.subplots(3, 1, sharex=False, sharey= False, figsize=(24,16)) 

ax1.bar(len(buyreturns), buyreturns['return30'], bar_width, color=(buyreturns['return30'] > 0).map({True: 'g', False: 'r'}))
ax2.bar(len(buyreturns), buyreturns['return60'], bar_width, color=(buyreturns['return60'] > 0).map({True: 'g', False: 'r'}))
ax3.bar(len(buyreturns), buyreturns['return90'], bar_width, color=(buyreturns['return90'] > 0).map({True: 'g', False: 'r'}))

plt.show()

任何有关如何解决这些问题并返回3条形图的信息都将是很棒的!谢谢

enter image description here

2 个答案:

答案 0 :(得分:1)

在对plot()的呼叫中使用ax=<the reference to your axes>

fig, (ax1, ax2, ax3) =  plt.subplots(3, 1, sharex=False, sharey= False, figsize=(24,16)) 

buyreturns['return30'].plot.bar(grid=True, color=(buyreturns['return30'] > 0).map({True: 'g', False: 'r'}), ax=ax1)
buyreturns['return60'].plot.bar(grid=True, color=(buyreturns['return60'] > 0).map({True: 'g', False: 'r'}), ax=ax2)
buyreturns['return90'].plot.bar(grid=True, color=(buyreturns['return90'] > 0).map({True: 'g', False: 'r'}), ax=ax3)

答案 1 :(得分:1)

类似于Diziet的回答,但更多的程序化

fig, axes =  plt.subplots(3, 1, sharex=False, sharey= False, figsize=(24,16)) 

# range(30,91,30) represents (30,60,90)
for i, ax in zip(range(30,91,30), axes):
    col_name = f'return{i}'
    colors = (buyreturns[col_name] > 0).map({True: 'g', False: 'r'})
    buyreturns[col_name].plot.bar(grid=True, 
                                  color=colors,
                                  ax=ax)

plt.show()