我尝试在一个图中绘制两个数据集,包括错误栏。它对一个数据集非常好。但在这个“解决方案”中:
from __future__ import print_function
from matplotlib import pyplot as plt
import numpy as np
f2 = open('data1.txt', 'r')
lines = f2.readlines()
f2.close()
f3 = open('data2.txt', 'r')
lines2 = f3.readlines()
f3.close()
x1 = []
y1 = []
xerr1 = []
yerr1 = []
x2 = []
y2 = []
xerr2 = []
yerr2 = []
for line in lines:
p = line.split()
x1.append(float(p[0]))
y1.append(float(p[1]))
xerr1.append(float(p[2]))
yerr1.append(float(p[3]))
for line2 in lines2:
k = line2.split()
x2.append(float(k[0]))
y2.append(float(k[1]))
xerr2.append(float(k[2]))
yerr2.append(float(k[3]))
xv = np.array(x1)
yv = np.array(y1)
xerror = np.array(xerr1)
yerror = np.array(yerr1)
xv2 = np.array(x2)
yv2 = np.array(y2)
xerror2 = np.array(xerr2)
yerror2 = np.array(yerr2)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title("test", fontweight='bold')
ax1.set_xlabel('test', fontsize=14, fontweight='bold')
ax1.set_ylabel('test', fontsize=16, fontweight='bold')
ax1.grid(True)
plt.ylim(67.2, 70.75)
plt.xlim(-45, 30)
plt.errorbar(xv, yv, xerr=xerror, yerr=yerror, fmt='-o', linestyle='None', color='k', marker='.')
plt.errorbar(xv2, yv2, xerr=xerror2, yerr=yerror2, fmt='-o', linestyle='None', color='k', marker='.')
plt.plot(xv, yv, marker='o', markersize='6', markeredgewidth='0', linestyle='None', linewidth=0, color='b')
plt.plot(xv2, yv2, marker='o', markersize='6', markeredgewidth='0', linestyle='None', linewidth=0, color='r')
plt.show()
我只收到错误
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
File "E:/script.py", line 39, in <module>
x2.append(float(k[0]))
IndexError: list index out of range
我没有看到错误,需要一些帮助。有没有人知道这种方式有什么问题?我希望这不容易......
答案 0 :(得分:1)
for line2 in lines2:
中可能有一个空行,因为它为IndexError: list index out of range
提供k[0]
,这意味着在这种情况下k不存在索引0
。
确保检查拆分结果是否为空。
例如:
for line2 in lines2:
k = line2.split()
if len(k)==0:
#do something
else:
x2.append(float(k[0]))
y2.append(float(k[1]))
xerr2.append(float(k[2]))
yerr2.append(float(k[3]))
第一个for循环也应该这样做。
答案 1 :(得分:1)
你的问题是,某些时候k=line2.split()
没有任何元素。例如,如果第二个文件有一个空行(因为它可能在末尾),那么split
函数将为您提供一个空列表