Pandas 在条形图中修改errorbar范围

Pandas 在条形图中修改errorbar范围,pandas,matplotlib,Pandas,Matplotlib,我正在用一个包含错误条(围绕条顶部对称)的pandas条形图绘制数据,我想修改此图中单个错误条的范围,使其仅显示在一半上。我该怎么做 下面是一个具体的例子: import numpy as np import matplotlib.pyplot as plt import pandas as pd bars = pd.DataFrame(np.random.randn(2,2), index=['a','b'], columns=['c','d']) errs = pd.DataFrame(n

我正在用一个包含错误条(围绕条顶部对称)的pandas条形图绘制数据,我想修改此图中单个错误条的范围,使其仅显示在一半上。我该怎么做

下面是一个具体的例子:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

bars = pd.DataFrame(np.random.randn(2,2), index=['a','b'], columns=['c','d'])
errs = pd.DataFrame(np.random.randn(2,2), index=['a','b'], columns=['c','d'])

ax = bars.plot.barh(color=['r','g'],xerr=errs)
这就产生了这样一个图:

我试图对索引
a
和列
d
的错误条进行后验访问和修改,使其仅显示前半部分,即一段
[bar\u top-err,bar\u top]
,而不是
[bar\u top-err,bar\u top+err]
。我试图检索以下matplotlib对象:

plt.getp(ax.get_children()[1],'paths')[0]

如果我没有弄错的话,它是一个
Bbox
,描述了正确的对象,但我无法在绘图中修改它。你知道怎么做吗?

你就快到了,只需要修改和更新路径顶点中的坐标即可。我冒昧地假设您希望错误条面向“远离零”,而不是仅仅显示其负面部分:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

bars = pd.DataFrame(np.random.randn(2,2), index=['a','b'], columns=['c','d'])
errs = pd.DataFrame(np.random.randn(2,2), index=['a','b'], columns=['c','d'])

ax = bars.plot.barh(color=['r','g'], xerr=errs)
child = ax.get_children()[1]

path = plt.getp(child, 'paths')[0]
bar_top = path.vertices.mean(axis=0)[0]

# replace the right tail if bar is negative or left tail if it's positive
method = np.argmin if np.sign(bar_top)==1 else np.argmax
idx = method(path.vertices, axis=0)[0]
path.vertices[idx, 0] = bar_top

plt.savefig('figs/hack-linecollections.png', dpi=150)
plt.show()

类型(plt.getp(ax.get_children()[1],'paths')[0])
告诉我它实际上是一个
matplotlib.path.path
。当然,它实际上是
plt.getp(ax.get_children()[1],'paths')[0]。get_extenses()
类型是
matplotlib.transforms.Bbox
。但具体来说,这并不能帮助我找到解决办法。。。