将matplotlib直方图添加到列表中,而不会覆盖

时间:2019-04-18 20:34:12

标签: python-3.x matplotlib

我正在尝试编写一个函数,以便使用一些数据的for循环创建多个直方图(使用matplotlib.pyplot)。我将这些图添加到列表中,然后返回列表。 但是当我尝试在每个图上使用show()时,它们都是相同的图,并且所有图都被覆盖。

我曾尝试在for循环的末尾使用plt.clf(),但对我而言不起作用。

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 个答案:

答案 0 :(得分:0)

首先,也许我们应该质疑这一需求:为什么要保留所有情节?为什么在绘制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)

For more info on subplots

For more info on multiple figures