我的程序在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弹出窗口中看到的第一组文件。
如果我错过了任何重要信息,请告诉我。
谢谢,
力欧
答案 0 :(得分:3)
我认为这是因为混合了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)
...