matplotlib.pyplot errorbar ValueError取决于数组长度?

时间:2016-09-12 15:03:31

标签: arrays matplotlib

下午好。

我现在已经挣扎了一段时间,虽然我可以在网上找到类似的问题,但我发现的任何东西都无法真正帮助我解决它。

从包含三列(x,y和y的错误)的标准数据文件(.csv或.txt)开始,我想读入数据并生成包含误差线的线图。

我可以毫无问题地绘制x和y值,但如果我想使用matplotlib.pyplot errorbar实用程序添加错误栏,我会收到以下错误消息:

ValueError: yerr must be a scalar, the same dimensions as y, or 2xN.

如果我使用一些任意数组(numpy或plain python),下面的代码可以工作,但不能从文件中读取数据。我尝试使用asarray将我从输入代码中获取的元组转换为numpy数组,但无济于事。

import numpy as np
import matplotlib.pyplot as plt

row = []
with open("data.csv") as data:
    for line in data:
        row.append(line.split(','))

column = zip(*row)

x = column[0] 
y = column[1]
yer = column[2]

plt.figure() 
plt.errorbar(x,y,yerr = yer)

fig = plt.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('example.png', dpi=300)

一定是我忽略了什么。我对此事的任何想法都非常感激。

1 个答案:

答案 0 :(得分:0)

yerr应该是y值中的加/减错误。在您的情况下,添加的等于减去的等于第三列的一半。

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('data.csv', delimiter=',')

plt.figure()
yerr_ = np.tile(data[:, 2]/2, (2, 1))
plt.errorbar(data[:, 0], data[:, 1], yerr=yerr_)
plt.xlim([-1, 3])
plt.show()

data.csv

0,2,0.3
1,4,0.4
2,3,0.15