我有一个数据文件,我想在其中绘制第二列的特定行。我的脚本如下:
f=open('datafile','r')
lines1=f.readlines()[4:24]#since I want the values from the 4th to the 23rd line
lines2=f.readlines()[33:54]#I want the values from the 33rd to the 53rd line
f.close()
x1=[]
y1=[]
for line in lines1:
p=line.split()
x1.append(float(p[1]))#the values are in the second column
for line in line2:
p=line.split()
y1.append(float(p[1]))
xv=np.array(x1)
yv=np.array(y1)
plt.plot(xv,yv)
然而,最后我有一个错误说“x和y必须具有相同的第一维”。我对python不是很有经验,有人可以告诉我任何替代方案或让我知道我做错了什么?我怎样才能以不同的方式提取那些行?
我想将x =第2列从第4行映射到第25行,而y =第2列从第33行到第54行。
非常感谢你。
此致
吉奥
答案 0 :(得分:3)
你做错了两次致电readlines
。
file object的行为类似于iterator。致电readlines
将耗尽。第二个调用将返回一个空列表。
您可以获取一次行列表,然后使用它:
lines = f.readlines()
lines1 = lines[4:24]
lines2 = lines[33:54]
但是,看起来列表的长度会相差1,我想你需要纠正它。
另请注意,您无需将列表转换为numpy
数组即可绘制它们。
答案 1 :(得分:1)
您可以使用numpy.genfromtxt和python切片解决此问题:
import numpy as np
import matplotlib.pyplot as plt
x_start, x_end = 4, 25 # get values from the 4th to the 25rd line
y_start, y_end = 33, 54 # get values from the 33rd to the 54rd line
x = np.genfromtxt('datafile', usecols=(1))
y = np.genfromtxt('datafile', usecols=(1))
x = x[x_start - 1:x_end]
y = y[y_start - 1:y_end]
print ' x=', x, '\n\n y=', y
plt.plot(x, y)
plt.show()