【发布时间】:2018-02-18 10:06:24
【问题描述】:
我有带有结构的 Pandas 数据框:
A B
0 1 1
1 2 1
2 3 4
3 3 7
4 6 8
如何生成 Seaborn Violin 图,每列作为自己的独立小提琴图以进行并排比较?
【问题讨论】:
-
我建议接受另一个答案,因为这是大多数人想要的......
我有带有结构的 Pandas 数据框:
A B
0 1 1
1 2 1
2 3 4
3 3 7
4 6 8
如何生成 Seaborn Violin 图,每列作为自己的独立小提琴图以进行并排比较?
【问题讨论】:
您可以先通过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)
【讨论】:
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"]])