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

时间:2016-04-09 04:53:12

标签: 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]]

我有另一个包含标签的列表

titles = ['Strongly Agree', 'Agree', 'Neutral',
          'Disagree', 'Strongly Disagree']

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

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

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

我可以生成饼图,但图表和标签会被覆盖。只有第一个数字才能正确显示,其余数字将被覆盖。当我手动完成所有数字生成正确,但如果我把它放在一个循环中它没有得到正确保存(它被覆盖)。以下是生成的图像(仅3个):

Figure 1Figure 2Figure 3

可能是什么问题?请帮助我。我是matplotlib的新手。

1 个答案:

答案 0 :(得分:4)

在尝试生成一个新数字之前清除你正在使用的数字是一个好主意,只是为了清楚你是从一个空白的平板开始。您可以使用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')