Matplotlib。在'for loops'中绘制到同一轴

时间:2015-09-17 13:00:32

标签: python matplotlib

我有一个相当简单的问题,但有些事情让我难以忍受2天。 我需要绘制2个以上的文件。每个文件需要在总共25个图上绘制,但必须绘制在同一组轴上。 (即如果我需要2个文件,每个图上需要25个图,每行2行)。

我有这个sudo代码生成50个图(每行一行)......这是错误的

<!-- Enable servlets as welcome files -->
<context-param>
    <param-name>
       org.eclipse.jetty.servlet.Default.welcomeServlets
    </param-name>
    <param-value>true</param-value>
</context-param>

有没有办法在第二次输入for循环时恢复到初始轴的设置,这样每个绘图就会得到2行25个点(而不是50个)?

2 个答案:

答案 0 :(得分:8)

您的问题源于您的使用:

f, ax = plt.subplots()

这意味着每次点击该行时都会生成一个新的子图(在您的情况下为50次)。您需要生成25个子图并稍后引用它们。你可以这样做:

axes = []
for i in range(25):
    f,ax = plt.subplots()
    axes.append(ax)

然后在你的循环中:

for df_index in range(len(grouped_df)):
    df = grouped_df[df_index]
    density_data = 'Get density data from df'
    sns.kdeplot(density_data, ax=axes[df_index], linewidth=1)

您还可以检查轴是否存在(如果它延伸到超过25个子图或其他内容),如果不存在,则创建它。

答案 1 :(得分:2)

使用plt.figure()也可以完成工作......

iterate = -1
for df in grouped_df:
    iterate += 1
    plt.figure(iterate)
    density_data = 'Get density data from df'
    sns.kdeplot(density_data, linewidth=1)
    pp.savefig()
pp.close()