我创建了三个条形图。我想使用非常流行的无花果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条形图的信息都将是很棒的!谢谢
答案 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()