Seaborn中的小提琴图为什么不显示均值、百分位数和棒图?

3
当我尝试复制这里的示例时,我的小提琴图(使用我的数据)没有显示中位数和中位数,以及第25和第75百分位数,但原始示例却有。

它似乎也忽略了参数"sticks"

这是我尝试的:

sns.violinplot(df, "stick", color="pastel")

这是我得到的结果:
而原始图像看起来像这样(对于`sns.violinplot(df,color =“pastel”)`):
注意:
这个问题不影响箱线图。
这是一个最小示例,导致非常类似的形状:
> df

                                A               B
0RS0NrQDHHx                   NaN        19.727869
0RS232Ak80k                   NaN        32.552973
0RSECe1NRShE                  NaN        44.369213
0RSHVQNT16d                   NaN        11.306910
0RSO4JcoLeb                   NaN        -7.935776
0RSOrrpKlRu                   NaN        39.489909
0RSVIHDWBR1                   NaN        52.830051
0RSWe5CE1Hk                   NaN        26.913323
0RSXhLG3Kp8             -1.921543              NaN
0RSc8uRSessd             27.028029             NaN
0RScRSZoDX72             12.713600             NaN
0RSdwNiizS0             28.859158              NaN
0RSeWHWRSww3             12.537717             NaN
0RSrs6jjCsM              5.135179              NaN
0RStNwVhvO1            -55.566641              NaN
0RStQI2VH5A            -15.119272              NaN
0RStWRWmH8V             -2.369918              NaN
0RSukeajMJy             -0.904298              NaN
0RSvJezMyrx             -1.105769              NaN
0RSx5WRStDjG             0.899420              NaN

请提供一个最小化的工作示例,以展示问题。 - Paul H
感谢 @PaulH,我已经更新了帖子。 - Josh
1个回答

4
尝试使用sns.violinplot(df, inner="stick", color="pastel")。第二个位置参数是分组变量。(尽管inner="stick"会显示每个观测值。如果您想要第25、50和75个百分位数,请使用inner="box")。
此外,为了处理具有大量NAs的相对稀疏的数据框,例如:
df = pd.DataFrame(np.random.randn(20, 5), columns=list("ABCDE"))
for i, c in zip(range(5, 10), df.columns):
    df.loc[i, c] = np.nan

您可以做的是:
plot_vals = [v.dropna() for k, v in foo.iteritems()] 
sns.violinplot(plot_vals, names=df.columns)

谢谢 - 但是没有解决问题。我想知道问题是否出在 NaNs 上?(尽管箱线图可以计算中位数和百分位数) - Josh
可能是问题所在,我认为百分位数计算不安全。只需使用 df.dropna() 绘图即可。 - mwaskom
谢谢,虽然在我的情况下,df.dropna()只会简单地减少为空的数据框。有什么建议吗? - Josh

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