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

Trying to plot multiple bar charts together using plt.subplot

我创建了三个条形图。我想使用非常流行的 fig, 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)

我想让这些使用 fig, ax = plt.subplots 函数堆叠在一起显示。

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

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()

我也试过下面的代码,return第二张图片是什么。

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()

任何有关如何解决这些问题的意见和 return 3 个条形图都很棒!谢谢

在对 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)

与 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()