Добавление графиков гистограммы matplotlib в список без перезаписи

#python-3.x #matplotlib

#python-3.x #matplotlib

Вопрос:

Я пытаюсь написать функцию, такую, чтобы она создавала несколько гистограмм (используя matplotlib.pyplot), используя цикл for для некоторых данных. Я добавляю эти графики в список, и список возвращается. Но когда я пытаюсь использовать show() на каждом из графиков, все они представляют собой один и тот же график, и все графики перезаписываются.

Я пробовал использовать plt.clf() в конце цикла for, но у меня это не работает.

 for data in data_list:
    n, bins, patches = plt.hist(x=data, bins='auto', color=color,
                                    alpha=0.7, rwidth=0.85)
    plt.xlabel('Values')
    plt.ylabel('Frequency')
    plt.grid(axis='y', alpha=0.55)
    plots.append(plt)
 

Ответ №1:

Во-первых, возможно, нам следует задать вопрос о необходимости: почему вы хотите сохранить все графики под рукой? Почему бы не сохранить их после построения plt.savefig('xxxxx') графика? Планируете ли вы анимировать все фигуры?

Во-вторых, если мы хотим сохранить все цифры, subplots это может быть удобным инструментом. Обратите внимание, что вы все еще строите график на одном графике, но вызов subplots создает несколько осей и позволяет им не мешать друг другу. Попробуйте это:

 import matplotlib.pyplot as plt
np.random.seed(0)
data_list = [np.random.randn(10) for _ in range(4)]
plots=[]
fig, axes = plt.subplots(4,1)
for i,data in enumerate(data_list):
    n, bins, patches = axes[i].hist(x=data, bins='auto', 
                                    alpha=0.7, rwidth=0.85)
    axes[i].set_xlabel('Values')
    axes[i].set_ylabel('Frequency')
    axes[i].grid(axis='y', alpha=0.55)
 

Для получения дополнительной информации о subplots

Для получения дополнительной информации о нескольких фигурах