当有3个以上的数据点可用时(条件A),我希望在条形图中有误差线,但当特定条件下的数据点少于3个时(条件B),我希望省略误差线。
我只找到了显示或隐藏所有条的误差条的选项,而不是特定条件的选项。
import pandas as pd
import seaborn as sns
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(15)), columns=["Value"])
df["Label"]="Condition A"
df.Label[13:]="Condition B"
sns.barplot(data=df, x="Label", y="Value", errorbar="sd")
实际结局:所有条上的误差条:
预期结果:仅条件A的误差线:
2条答案
按热度按时间a1o7rhls1#
您可以在
sns.barplot
中使用自定义错误条函数。它应该返回一个[y1,y2] iterable,其中包含最小/最大误差的位置:另一个选项可以是手动绘制误差线:
输出:
sg24os4d2#
找到this answer后,我想到了一个可能的解决方案,循环遍历
ax.lines
,并将那些不想显示线宽的宽度设置为0。这要求show_errors
与df.Label.unique()
的顺序相同。注意:这假设图中没有其他线,所以简单的条形图就可以了,但是如果图中有任何额外的线,那么这将返回错误,因为
ax.lines
的长度将不等于show_errors
。正如@mozway在他的回答中所示,它可以通过一个条件创建
show_errors
:show_errors = df.groupby("Label", sort=False).Value.count().ge(3).tolist()