seaborn中的小提琴图不显示均值、百分位数或棒?

3 投票
1 回答
3434 浏览
提问于 2025-04-17 23:11

当我尝试复制这里的例子时,我的数据生成的提琴图没有显示中位数和四分位数(25%和75%),而原始例子是有的。

而且,它似乎也忽略了参数"sticks"

这是我尝试的代码:

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

这是我得到的结果:

enter image description here

而原始的结果看起来是这样的(对于sns.violinplot(df, color="pastel")):

enter image description here

注意:

这个问题影响箱线图。

这里有一个简单的例子,结果形状(非常相似):

> 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

1 个回答

4

试试 sns.violinplot(df, inner="stick", color="pastel")。第二个参数是用来分组的变量。(虽然 inner="stick" 会显示每个观察值。如果你想要显示25%、50%和75%的分位数,可以用 inner="box")。

另外,如果你的数据表中有很多缺失值,比如:

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)

撰写回答