来自 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

来自元组的 Pandas DataFrame 列

来自Python Dictionary的PySpark Dataframe没有Pandas

来自 Pandas DataFrame 的用户定义的 Json 格式

使用 matplotlib 在一个子图中绘制来自 pandas DataFrame 的两个直方图