我有一个Pandas Dataframe,其结构如下:
A B
0 1 1
1 2 1
2 3 4
3 3 7
4 6 8
如何生成Seaborn的小提琴图,并使每列均成为其自己单独的小提琴图,以便进行并排比较?
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
),它似乎会将列连接在一起,然后绘制所有数据的小提琴图)
sns.violinplot(data=df[["A", "B"]])
- Giovani Guizzo你可以先使用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)