来自 Pandas Dataframe 的 Seaborn 小提琴图,每列都有自己单独的小提琴图
Posted
技术标签:
【中文标题】来自 Pandas Dataframe 的 Seaborn 小提琴图,每列都有自己单独的小提琴图【英文标题】:Seaborn Violin Plot from Pandas Dataframe, each column its own separate violin plot 【发布时间】: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 图,每列作为自己的独立小提琴图以进行并排比较?
【问题讨论】:
我建议接受另一个答案,因为这是大多数人想要的...... 【参考方案1】:您可以先通过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)
【讨论】:
【参考方案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
),它似乎将列连接在一起,然后绘制所有数据的小提琴图)
【讨论】:
简单而实用的答案。如果我可以补充一点,如果您的列不仅仅是“A”和“B”列,您可以尝试这样做:sns.violinplot(data=df[["A", "B"]])
以上是关于来自 Pandas Dataframe 的 Seaborn 小提琴图,每列都有自己单独的小提琴图的主要内容,如果未能解决你的问题,请参考以下文章
合并具有来自两个不同列的匹配值的 DataFrame - Pandas [重复]
来自 Python 嵌套字典的 Pandas Dataframe
来自Python Dictionary的PySpark Dataframe没有Pandas