使用matplotlib错误栏绘制pandas读取文件时断言错误matplotlib

时间:2015-11-27 22:29:23

标签: python matplotlib

当我尝试绘制使用pandas read_csv从csv文件中读取的某些数据的错误栏时,我收到以下错误。

ax.errorbar(x1, y1, yerr = std1, marker='d',color='y', label='y1')
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 5762, in errorbar
xo, _ = xywhere(x, lower, everymask)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 5669, in xywhere
assert len(xs) == len(ys)
AssertionError

我使用的代码是:

 ress=pd.read_csv('/path/myfile', delimiter=',',skiprows=[0],header=None,dtype=None)
 x1=ress[[0]]
 y1=ress[[3]]
 std1=ress[[4]]

 ax=plt.subplot(111)
 ax.errorbar(x1,y1,yerr=std1,marker='d',color='y',label='y1')

我一开始认为x1和y1不是相同的尺寸,因此我打印了x1.shapey1.shapestd1.shape以及所有(11,1) }。附: (11,1)是表示我的数据的正确方法。

你知道我为什么会收到这个错误吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

错误消息在这里有点误导。因为您正在使用

x1 = ress[[0]]

而不是

x1 = ress[0]

等,你传递errorbar一个DataFrame(形状(11,1)的2D对象)而不是一个系列(形状(1,)的1D对象)。这是令人困惑的matplotlib。删除额外的括号,它应该工作。例如,我们有

>>> ress = pd.DataFrame({0: range(15,20), 3: range(5), 4: [2]*5})
>>> x1 = ress[[0]]
>>> y1 = ress[[3]]
>>> std1 = ress[[4]]
>>> ax = plt.subplot(111)
>>> ax.errorbar(x1,y1,yerr=std1.values,marker='d',color='y',label='y1')
Traceback (most recent call last):
[...]
    assert len(xs) == len(ys)
AssertionError

>>> x1,y1,std = ress[0], ress[3], ress[4]
>>> ax = plt.subplot(111)
>>> ax.errorbar(x1,y1,yerr=std1.values,marker='d',color='y',label='y1')
<Container object of 3 artists>

example errorbar plot