如何在matplotlib中处理图形
我是 Python/Django 的新手,我尝试创建一个生成绘图的网站。为了生成绘图,我使用 matplotlib。
当我第一次运行页面时,一切正常,但刷新结果后,我得到错误的图(由新图和旧图组成)。
这里是代码:
from pylab import *
...
#prepare values and labels
values = []
labels = []
values.append(float(user.playcount)/sum*100)
labels.append(user.name)
for friend in friends:
friend = friend.getInfo()
values.append(float(friend.playcount)/sum*100)
labels.append(friend.name)
# create figure
figure(1)
# set some parameters
params = { 'axes.labelsize': 6, 'text.fontsize': 6, 'font.size': 6, 'legend.fontsize': 6, 'xtick.labelsize': 6, 'ytick.labelsize': 6,}
rcParams.update(params)
# draw, add legend and save
pie(values, labels=labels, shadow=False)
l = legend(loc='lower center', ncol= 5, bbox_to_anchor=(0.5, -0.25))
l.get_frame().set_alpha(0.0)
savefig('media/images/3.png', dpi=100, transparent=True)
#close(1)
如果我取消注释 close(1) 指令,刷新页面将会出现问题,因为应用程序将卡在figure() 指令上。
谁能告诉我问题出在哪里?我认为图形处理有问题,但我不知道到底是什么。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为您会受益于使用 cla() 轴方法,该方法 清除轴。您可以在完成任何操作之前在脚本顶部执行此操作;甚至在第一个情节之前。我会使用它而不是
close()
,因为这样第二次该数字将不存在。因此,我会将figure(1)
行替换为This 将图形设置为图 1,然后获取当前轴 (
gca()
),然后使用 < 清除它代码>cla()。这是我独立于 django 运行的一个脚本,它对我有用,并且模拟了我认为你正在尝试做的事情:你可能只需要一行就可以逃脱;只是让这对我有用:
但也许另一种方式会更清楚。
I think you would benefit from using the
cla()
axes method, which clears the axes. You can do this at the top of your script before anything is done; even before the first plot. I would use this instead ofclose()
, because then the second time around the figure will not exist. So I would replace thefigure(1)
line withThis sets the figure to figure 1, and then gets the current axes (
gca()
) and then clears it withcla()
. Here's a script I ran independantly of django, that worked for me and emulates what I think you are trying to do:You probably can get away with only one line; just having this worked for me:
But it's a bit clearer perhaps the other way.
根据 Cristian Ciupitu 对 这个类似问题的回答,使用
figure()
而不是figure(1)
应该可以解决问题。According to Cristian Ciupitu's answer to this similar question, use
figure()
instead offigure(1)
should solve the problem.