Python Matplotlib - 使用 for 循环时保存的图像被覆盖

Jer*_*ril 4 python matplotlib

我有一个大名单,其中有六个小名单。这六个小列表用作切片值,同时使用 matplotlib 生成饼图。

f_c = [[4, 1, 0, 1, 0], 
       [4, 1, 0, 1, 0], 
       [4, 1, 0, 1, 0], 
       [4, 0, 2, 0, 0], 
       [4, 0, 2, 0, 0], 
       [4, 1, 0, 0, 1]]
Run Code Online (Sandbox Code Playgroud)

我还有一个带有标签的列表

titles = ['Strongly Agree', 'Agree', 'Neutral',
          'Disagree', 'Strongly Disagree']
Run Code Online (Sandbox Code Playgroud)

现在,我使用 for 循环来保存生成的饼图。代码如下:

for i, j in zip(f_c, lst):
    pie(i,
    labels=titles,
    shadow=True)
    savefig(j + '.png')
Run Code Online (Sandbox Code Playgroud)

'lst' 是一个具有文件名的列表,用于保存饼图。

我能够生成饼图,但图表和标签被覆盖。只有第一个数字正确出现,其余数字被覆盖。当我手动完成所有数字时,所有数字都正确生成,但是如果我将其放入循环中,则无法正确保存(它会被覆盖)。以下是生成的图像(仅3张):

图1 , 图2 , 图 3

可能是什么问题?请帮我解决这个问题。我是 matplotlib 的新手。

mpr*_*rat 7

在尝试生成新图形之前清除您正在使用的图形是一个好主意,只是为了清楚您是从一张白纸开始。你用 清除plt.clf(),它代表“清晰的数字”。

与您的问题没有直接关系,但在 Python 中不做也是一个好主意from matplotlib import *,因为它可能会覆盖您在本地拥有的其他方法。使用有意义的变量名也有帮助。

像这样的事情会起作用:

import matplotlib.pyplot as plt
for fig, fig_name in zip(fig_data, fig_names):
    plt.clf()
    plt.pie(fig, labels=titles, shadow=True)
    plt.savefig(fig_name + '.png')
Run Code Online (Sandbox Code Playgroud)