使用pylab绘制文件中的特定列和行

时间:2012-12-06 16:17:40

标签: python matplotlib

我有一个数据文件,我想在其中绘制第二列的特定行。我的脚本如下:

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行。

非常感谢你。

此致

吉奥

2 个答案:

答案 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()