当我尝试绘制使用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.shape
,y1.shape
和std1.shape
以及所有(11,1)
}。附: (11,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>