Pandas 在条形图中修改errorbar范围
我正在用一个包含错误条(围绕条顶部对称)的pandas条形图绘制数据,我想修改此图中单个错误条的范围,使其仅显示在一半上。我该怎么做 下面是一个具体的例子: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
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
。但具体来说,这并不能帮助我找到解决办法。。。