我从物理实验中的检测相机制作的电影中获得了大量的粒子位置数据。第一列只给出帧号,第二列到第四列是x,y和z位置。
现在我想绘制前10帧的x和y位置,但是对于不同图形中的每个帧。我正在使用compress
命令来提取每个帧的数据。到目前为止,这是我的代码:
import numpy as np
from itertools import compress
data = np.genfromtxt('beta_tracking.csv', delimiter=' ')
f=data[:,0]
x=data[:,1]
y=data[:,2]
z=data[:,3]
k=range(1,11)
for j in k:
g=list(compress(x, (abs(i)==j for i in f)))
h=list(compress(y, (abs(i)==j for i in f)))
plot(g,h,',')
savefig('plots/framedata.png')
然而,这给了我一个图中前10帧的x和y位置。如何告诉python为每个帧创建一个新数字并自动保存?
答案 0 :(得分:1)
http://matplotlib.org/faq/usage_faq.html
matplotlib的OO界面允许您跟踪绘制线条的位置,它将是这样的:
FigList = [ ] # to store the figures
for x,y in zip(g,h):
FigList.append(plt.figure())
ax = FigList[-1].add_subplot(1,1,1)
ax.plot(x,y,',')
FigList[-1].savefig(FigureName)
答案 1 :(得分:0)
所以,这段代码完全符合我的要求:
import numpy as np
import matplotlib.pyplot as plt
from itertools import compress
data = np.genfromtxt('beta_tracking.csv', delimiter=' ')
f=data[:,0]
x=data[:,1]
y=data[:,2]
z=data[:,3]
k=range(1,11)
for j in k:
g=list(compress(x, (abs(i)==j for i in f)))
h=list(compress(y, (abs(i)==j for i in f)))
FigList = [ ]
FigList.append(plt.figure())
ax = FigList[-1].add_subplot(1,1,1)
ax.plot(g,h,',')
for i in plt.get_fignums():
plt.figure(i)
plt.savefig('plots/figure%d.png' % i)