从txt
文件中绘制数据时存在问题。 txt
文件中有7列,我想使用最后一列和第三列中的数据(分别作为x轴和y轴),但是该命令不起作用。
错误是:
x = [row.split()[6] for row in data]
> IndexError: list index out of range
我的代码是:
x = [row.split()[6] for row in data]
y = [row.split()[2] for row in data]
index = [i for i,val in enumerate(x)]
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_xticklabels(x)
ax1.plot(index ,y, c='r')
leg = ax1.legend()
plt.locator_params(nbins=len(index)-1)
plt.show()
这是我的txt
文件的一部分。
01.05.2016 00:01:00 313 U 42491,00069 -1,87 01.05.2016 00:02
01.05.2016 00:02:00 313 U 42491,00139 -1,87 01.05.2016 00:03
01.05.2016 00:03:00 313 U 42491,00208 -1,87 01.05.2016 00:04
如有必要,以下代码显示了如何初始化数据:
import matplotlib.pyplot as plt
with open("tesy=t.txt") as f:
data = f.read()
data = data.split('\n')
答案 0 :(得分:1)
我在文件file.txt
中使用了您的三行数据,根据您的描述,这是通过重写代码获得的图。您不需要名为index
的其他变量来标记x标记。您可以直接绘制x
,x-tick标签将自动设置。要访问最后一列,我正在使用索引[-1]
。这样可以避免计算列数和手动放置索引。我删除了图例,因为在绘图命令中您没有定义图例。
file = open("file.txt", 'r')
data = file.readlines()
data[0].split()
x = [row.split()[-1] for row in data] # if no blank line in the file
y = [row.split()[2] for row in data] # if no blank line in the file
# x = [row.split()[-1] for row in data if row.strip()] # if blank lines in the file
# y = [row.split()[2] for row in data if row.strip()] # if blank lines in the file
index = range(len(x))
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(x ,y, '-ro')
输出
答案 1 :(得分:0)
您可以尝试执行此操作,这应该适合您的文件,并逐行读取,然后从每行的最后一列中提取x值并将其附加到列表x中,然后从第三列中提取y值并将其附加到列表y 之后,您将保存所有数据(x和y)并列出,现在就可以绘图
x = []
y = []
filename = '/data.txt'
with open(filename) as f:
x = [x.split(' ')[-1] for x in f.readlines()]
with open(filename) as f:
y = [x.split(' ')[2] for x in f.readlines()]
这将导致一个包含带有\n
的值的列表,该列表引用新行
为避免这种情况,您可以
x = []
y = []
filename = '/data.txt'
with open(filename) as f:
x = [x.split(' ')[-1] for x in f.read().splitlines()]
with open(filename) as f:
y = [x.split(' ')[2] for x in f.read().splitlines()]
print(x)
print(y)
plt.figure(1)
plt.plot(x, y, marker='o')
plt.show()
输出将为
['00:02', '00:03', '00:04']
['313', '313', '313']