Попытка построить несколько гистограмм вместе, используя plt.subplot - PullRequest
0 голосов
/ 23 мая 2019

У меня есть три гистограммы, которые я создал. Я хотел бы построить их все вместе, используя очень популярную функцию 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.

Я попробовал следующий код, и возвращаемое изображение представляет собой объединение всех трех элементов, см. Первое изображение ниже

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 ]

1 голос
/ 23 мая 2019

Аналогично ответу Дизиета, но больше программно :

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()
1 голос
/ 23 мая 2019

используйте ax=<the reference to your axes> в вызове plot()

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