我有一个大名单,其中有六个小名单。这六个小列表用作切片值,同时使用 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张):
可能是什么问题?请帮我解决这个问题。我是 matplotlib 的新手。
在尝试生成新图形之前清除您正在使用的图形是一个好主意,只是为了清楚您是从一张白纸开始。你用 清除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)