Построение нескольких гистограмм в сетке

Я запускаю следующий код, чтобы нарисовать гистограммы в 3 на 3 сетки для 9 переменных. Однако, она отображает только одну переменную.

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

def draw_histograms(df, variables, n_rows, n_cols):
    fig=plt.figure()
    for i, var_name in enumerate(variables):
        ax=fig.add_subplot(n_rows,n_cols,i+1)
        df[var_name].hist(bins=10,ax=ax)
        plt.title(var_name+"Distribution")
        plt.show()

2 ответа

Решение

Вы правильно добавляете сюжеты, но звоните plt.show для каждого добавленного субплота, который приводит к тому, что было нарисовано до сих пор, то есть один сюжет. Например, если вы строите график в IPython, вы увидите только последний нарисованный график.

Matplotlib предоставляет несколько хороших примеров использования подзаговоров.

Ваша проблема исправлена ​​как:

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

def draw_histograms(df, variables, n_rows, n_cols):
    fig=plt.figure()
    for i, var_name in enumerate(variables):
        ax=fig.add_subplot(n_rows,n_cols,i+1)
        df[var_name].hist(bins=10,ax=ax)
        ax.set_title(var_name+" Distribution")
    fig.tight_layout()  # Improves appearance a bit.
    plt.show()

test = pd.DataFrame(np.random.randn(30, 9), columns=map(str, range(9)))
draw_histograms(test, test.columns, 3, 3)

Что дает сюжет как:

гистограммы подзаговоров

В случае, если вы действительно не беспокоитесь о названиях, вот одна строка

df = pd.DataFrame(np.random.randint(10, size=(100, 9)))
df.hist(color='k', alpha=0.5, bins=10)

Другие вопросы по тегам