Создание нескольких графиков с использованием l oop из кадра данных - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь создать фигуру, содержащую 9 подзаговоров (3 x 3). Данные по осям X и Y поступают из фрейма данных с помощью groupby. Вот мой код:

fig, axs = plt.subplots(3,3)
for index,cause in enumerate(cause_list):


    df[df['CAT']==cause].groupby('RYQ')['NO_CONSUMERS'].mean().axs[index].plot()
    axs[index].set_title(cause)



plt.show() 

Однако он не дает желаемого результата. Фактически он вернул ошибку. Если я удалю axs[index] перед plot() и помещу внутрь функции plot(), например plot(ax=axs[index]), тогда она сработает и создаст девять подзаголовков, но не отобразит данные в ней (как показано на рисунке). enter image description here

Может ли кто-нибудь указать мне, где я делаю ошибку?

1 Ответ

1 голос
/ 27 мая 2020

Вам нужно сгладить axs, иначе это будет 2-мерный массив. И вы можете указать топор в функции plot, см. документацию pandas plot , поэтому, используя пример:

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

cause_list = np.arange(9)

df = pd.DataFrame({'CAT':np.random.choice(cause_list,100),
                  'RYQ':np.random.choice(['A','B','C'],100),
                  'NO_CONSUMERS':np.random.normal(0,1,100)})

fig, axs = plt.subplots(3,3,figsize=(8,6))
axs = axs.flatten()
for index,cause in enumerate(cause_list):

    df[df['CAT']==cause].groupby('RYQ')['NO_CONSUMERS'].mean().plot(ax=axs[index])
    axs[index].set_title(cause)

plt.tight_layout()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...