使用Seaborn绘制Pandas数据框的小提琴图,每列都是单独的小提琴图。

19

我有一个Pandas Dataframe,其结构如下:

   A  B
0  1  1
1  2  1
2  3  4
3  3  7
4  6  8

如何生成Seaborn的小提琴图,并使每列均成为其自己单独的小提琴图,以便进行并排比较?


我建议接受其他答案,因为这是大多数人想要的... - n1000
2个回答

31

seaborn(至少版本为0.8.1;不确定是否为新版本)可以满足您的需求,而无需对您的数据帧进行任何操作:

import pandas as pd
import seaborn as sns
df = pd.DataFrame({'A': [1, 2, 3, 3, 6], 'B': [1, 1, 4, 7, 8]})
sns.violinplot(data=df)

小提琴图

(需要注意的是你必须设置data=df;如果只将df作为第一个参数传递(相当于在函数调用中设置x=df),它似乎会将列连接在一起,然后绘制所有数据的小提琴图)


简单而实用的答案。如果我可以补充一下,如果您不仅有“A”和“B”列,您可以尝试这样做:sns.violinplot(data=df[["A", "B"]]) - Giovani Guizzo

19

你可以先使用melt按列分组重塑,然后使用seaborn.violinplot

#old version of pandas
#df = pd.melt(df, var_name='groups', value_name='vals')
df = df.melt(var_name='groups', value_name='vals')
print (df)
  groups  vals
0      A     1
1      A     2
2      A     3
3      A     3
4      A     6
5      B     1
6      B     1
7      B     4
8      B     7
9      B     8

ax = sns.violinplot(x="groups", y="vals", data=df)

图表


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