3

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

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不是很有经验,有人可以给我建议或者让我知道我做错了什么吗?我怎样才能用不同的方式只提取那些行?

我想从第 4 行到第 25 行绘制 x= 第 2 列,从第 33 行到第 54 行绘制 y=第 2 列。

非常感谢您提前。

问候,

4

2 回答 2

3

你做错的是readlines两次打电话。

文件对象的行为类似于迭代器。调用readlines耗尽它。第二次调用将返回一个空列表。

您可以一次获取行列表,然后使用它:

lines = f.readlines()
lines1 = lines[4:24]
lines2 = lines[33:54]

不过,看起来列表的长度会相差 1,我想你需要纠正它。

另请注意,您不需要将列表转换为numpy数组来绘制它们。

于 2012-12-06T16:21:17.930 回答
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()
于 2012-12-06T16:50:29.617 回答