我有Pandas Dataframe结构:
A B
0 1 1
1 2 1
2 3 4
3 3 7
4 6 8
如何生成Seaborn Violin图,每列作为独立的小提琴图进行并排比较?
答案 0 :(得分:5)
您可以先按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)
答案 1 :(得分:2)
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
),它似乎就好了将列连接在一起,然后制作所有数据的小提琴图)