gpt4 book ai didi

python - Matplotlib:循环中保存的文件与 show() 中的不同

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:05 27 4
gpt4 key购买 nike

我的程序在 plt.show() 弹出窗口中显示了正确的图表,但在 fig.savefig 弹出窗口中却没有。我对 python 很陌生,如果它很简单,我深表歉意。我正在使用 python 2.7.10,windows (10)

import numpy as np
import matplotlib.pyplot as plt

data = np.genfromtxt('strike_details.txt') #, skip_header= 0
header= 3
information=10000
width = 5
files = 16
types = 4

length = information + header
frames = data[header:length,0]

fig= plt.figure()
plt.grid(True)

for i in range(0,int(files)):
density=data[(header+i*length):(length+i*length),4]
plt.plot(frames,density, label=data[i*length+1][2])

for j in range (0,files/types):
if i==(types*(j+1)-1):
plt.legend(loc='best')
plt.xlabel('$Frames$', fontsize=22)
plt.ylabel('$Density$', fontsize=22)
fig.savefig(str(data[j*length+1][0])+'_'+str(data[j*length+1][1])+'_'+str(data[j*length+1][2])+'.png',format='png', dpi=fig.dpi)
plt.show()
plt.clf()

该程序生成四个文件名不同的文件,但它们都是您在 plt.show 弹出窗口中看到的第一组。

如果我错过了任何重要的事情,请告诉我。

谢谢,

小刘

最佳答案

我认为这是由于混合了 matplotlib 的 API 风格和交互风格。当您调用 plt.show() 时,事件图和 fig 之间的链接断开,因此您继续输出您创建的第一个图。我可以用这个最小的例子重现这个问题:

import matplotlib.pyplot as plt

fig = plt.figure()

for n in range(0,10):
plt.plot(list(range(0,n)))
fig.savefig('test%d.png' % n)
plt.show()
plt.clf()

如果您删除 show(),问题就会消失。

正确的做法是通过plt.gcf()访问当前交互图:

plt.gcf().savefig(...)

或者,您可以通过在每个循环中重新创建图形对象来解决此问题:

for i in range(0,int(files)):
fig= plt.figure()
plt.grid(True)
...

关于python - Matplotlib:循环中保存的文件与 show() 中的不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com