我正在尝试编写一个函数,以便使用一些数据的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)
答案 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)