在Pandas条形图中更改误差棒标记(上下界线)

4

我正在绘制Pandas数据框的误差条,但是误差条顶部有一个奇怪的箭头,而我想要的是一条水平线。例如,如下图所示: 但是现在我的误差条末端以箭头结束,而不是水平线。

以下是我用来生成它的代码:

plot = meansum.plot(
    kind="bar",
    yerr=stdsum,
    colormap="OrRd_r",
    edgecolor="black",
    grid=False,
    figsize=(8, 2),
    ax=ax,
    position=0.45,
    error_kw=dict(ecolor="black", elinewidth=0.5, lolims=True, marker="o"),
    width=0.8,
)

那么我应该做哪些修改才能得到我想要的错误信息呢?谢谢。


2
优化你的代码格式,或许会有更多人回答你的问题。 - Vatsal
2个回答

3
使用matplotlib中的plt.errorbar可以更轻松地实现,因为它返回多个对象,包括caplines,其中包含您想要更改的标记(当将lolims设置为True时自动使用的箭头,请参见docs)。
使用pandas,您只需要挖掘plot的子项中的正确行并更改其标记即可:
import pandas as pd
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
df = pd.DataFrame({"val":[1,2,3,4],"error":[.4,.3,.6,.9]})
meansum = df["val"]
stdsum = df["error"]

plot = meansum.plot(kind='bar',yerr=stdsum,colormap='OrRd_r',edgecolor='black',grid=False,figsize=8,2),ax=ax,position=0.45,error_kw=dict(ecolor='black',elinewidth=0.5, lolims=True),width=0.8)
for ch in plot.get_children():
    if str(ch).startswith('Line2D'): # this is silly, but it appears that the first Line in the children are the caplines...
        ch.set_marker('_')
        ch.set_markersize(10) # to change its size
        break
plt.show()

结果如下:

结果看起来像这样: Resulting graph


2

只要不设置 lolim = True,您就可以开始了。以下是一个带有样本数据的示例:

import pandas as pd
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
df = pd.DataFrame({"val":[1,2,3,4],"error":[.4,.3,.6,.9]})
meansum = df["val"]
stdsum = df["error"]

plot = meansum.plot(kind='bar',yerr=stdsum,colormap='OrRd_r',edgecolor='black',grid=False,figsize=(8,2),ax=ax,position=0.45,error_kw=dict(ecolor='black',elinewidth=0.5),width=0.8)
plt.show()


1
但是 #1 我想要误差线上的帽子。#2 我只想要上面的误差线而不是下面的。 - nonickname
完美,我不确定是否有一种方法可以仅使用 pandasmatplotlib 来完成这个任务(去除箭头),但是您可以在 dict 参数中使用 capsize=5 来设置帽子。 - Vinícius Figueiredo
@nonickname 不,我的意思是,如果你没有设置 lolims=True,你可以使用 capsize=5 让帽子出现,但是,我不确定如何去掉箭头。 - Vinícius Figueiredo
好的,这并不能帮助我。所有这些解决方案我在发帖之前都尝试过了。我需要完全相同的形状。不过还是谢谢。 - nonickname
我会考虑在另一个调用中创建误差条,然后将它们移动到图形的后面(在z轴上),这可能有效。 - Vinícius Figueiredo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接