Несколько графиков на подзаголовках в pandas

#pandas #python-2.7 #matplotlib

#pandas #python-2.7 #matplotlib

Вопрос:

Допустим, у меня есть фрейм данных, который выглядит следующим образом (индексируется по датам):

 Value1 Value2 Value3 Value4 Value5
1      1      3      4      -1    
2      2      3      4      1
3      3      3      2      -1
  

Значения на самом деле не имеют значения, но я хотел показать пример.

У меня возникла, кажется, довольно простая проблема. Я пытаюсь построить график MACD, подобный тому, который можно найти здесь. Я хочу график, на котором указана цена акций, а непосредственно под ним — график с линиями MACD. У меня работают подзаголовки, но я не могу понять, как получить линейный график и гистограмму на одном графике. Я пробовал следующее:

 fig, axes = plt.subplots(nrows=2, ncols=1, sharex=True, squeeze=False)
ind3.iloc[:,0].plot(title="Stock Price", ax=axes[0,0], fontsize=12, color=colors)
ind3.iloc[:,1:-1].plot(title="MACD", ax=axes[1,0], fontsize=12, color=colors)
ind3.iloc[:,-1].plot(title="MACD", ax=axes[1,0], kind='bar',fontsize=12, color=colors)
  

В результате получается тарабарщина, которая выглядит следующим образом:

Диаграмма

Кто-нибудь может помочь? Спасибо!

Ответ №1:

Вероятно, это связано с тем, как вы используете индексацию iloc , но это трудно определить, не видя остальной части вашего кода.

Для нескольких графиков на подзаголовке вам просто нужно вызвать plot / bar для определенного подзаголовка и передать ему данные, которые вы хотите отобразить. В целом структура выглядит примерно так…

Сгенерируйте некоторые тестовые данные:

 import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randint(0,100,size=(10,2)), columns=list('AB'))
df['time'] = pd.date_range('2019-03-01', periods=10, freq='1D')
df = df.set_index('time')
print(df)

             A   B
time              
2019-03-01  12  73
2019-03-02  46  12
2019-03-03  41  10
2019-03-04  18  89
2019-03-05  60  98
2019-03-06  57  23
2019-03-07  59  73
2019-03-08  76  41
2019-03-09  71  34
2019-03-10  38  16
  

Создайте график:

 fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(8,10))
ax[0].set_title('Stock Price')
ax[1].set_title('MACD')

ax[1].plot(df.index, df['A'], color='b', label='Signal')
ax[1].bar(df.index, df['B'], color='g', label='MACD')

ax[1].set_xticklabels(df.index, rotation=90)

plt.legend(loc=1)
plt.tight_layout()
plt.show()
  

введите описание изображения здесь

Комментарии:

1. Ах, я не знал, что вы можете вызывать plt () и bar () для объекта axes. Спасибо за помощь… Я попробую это сделать.