унижающие объекты Axes, возвращаемые функцией plt.subplots () с циклом for - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь использовать цикл для заполнения каждого Axes в subplots следующим кодом:

df = sns.load_dataset('iris')
cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
# plotting
fig, ax = plt.subplots(2,2)
for ax_row in range(2):
    for ax_col in range(2):
        for col in cols:
            sns.distplot(df[col], ax=ax[ax_row][ax_col])

Но я получил один и тот же график по всем четырем осям.Как мне изменить его, чтобы он работал?

1 Ответ

0 голосов
/ 01 декабря 2018

Проблема в for col in cols:, когда вы просматриваете все столбцы для каждого подзаговора.Вместо этого вам нужно построить один столбец за раз в одном вспомогательном участке.Для этого можно использовать индекс i и постоянно обновлять его, пока вы просматриваете циклы.Ниже приведен ответ:

import seaborn as sns
df = sns.load_dataset('iris')
cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
# plotting
fig, ax = plt.subplots(2,2, figsize=(8, 6))
i = 0
for ax_row in range(2):
    for ax_col in range(2):
        ax_ = sns.distplot(df[cols[i]], ax=ax[ax_row][ax_col])
        i += 1
plt.tight_layout()  

РЕДАКТИРОВАТЬ: Использование enumerate

fig, ax = plt.subplots(2,2, figsize=(8, 6))
for i, axis in enumerate(ax.flatten()):        
    ax_ = sns.distplot(df[cols[i]], ax=axis)
plt.tight_layout()  

РЕДАКТИРОВАНИЕ 2: Использование enumerate на cols

fig, axes = plt.subplots(2,2, figsize=(8, 6))
for i, col in enumerate(cols):        
    ax_ = sns.distplot(df[col], ax=axes.flatten()[i])
plt.tight_layout()  

enter image description here

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