如何为每个班级和小组生成单独的小提琴图

Posted

技术标签:

【中文标题】如何为每个班级和小组生成单独的小提琴图【英文标题】:How to generate separate violinplots for each class and group 【发布时间】:2021-09-29 22:05:36 【问题描述】:

我有一个熊猫数据框:

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df['Label'] = np.random.randint(0,2,size=100)

我想在 python 中创建一个图形,其中 x 轴显示类标签('Class 0' 和 'Class 1'),对于每个类和预定义的变量,如 'B',小提琴图(里面有一个箱线图)被创建。

【问题讨论】:

【参考方案1】: 您想使用panda.DataFrame.melt 将数据帧转换为长格式,然后使用seaborn.violinplotseaborn.catplot 进行绘图。 pandas 1.3.0, seaborn 0.11.1, matplotlib 3.4.2

导入和数据帧

import pandas as pd
import seaborn as sns

# sample data
df = pd.DataFrame(np.random.randint(0, 100, size=(100, 4)), columns=list('ABCD'))
df['Class'] = np.random.randint(0, 2, size=100)

# melt the dataframe to a long form
dfm = df.melt(id_vars='Class', var_name='Group')

# display(dfm.head())
   Class Group  value
0      1     A     12
1      1     A     43
2      0     A     58
3      1     A     49
4      1     A     47

绘图

seaborn.violinplot

p = sns.violinplot(data=dfm, x='Group', y='value', hue='Class')
p.legend(title='Class', bbox_to_anchor=(1, 1), loc='upper left')
x='Group', hue='Class'

x='Class', hue='Group'

seaborn.catplot

要轻松地为每个组分别绘制,请使用seaborn.catplotkind='violin'
sns.catplot(kind='violin', data=dfm, x='Class', y='value', col='Group', col_wrap=2)

【讨论】:

【参考方案2】:

使用seaborn,非常简单:

import seaborn as sns
...
sns.violinplot(x=df.Label, y=df.B)

【讨论】:

以上是关于如何为每个班级和小组生成单独的小提琴图的主要内容,如果未能解决你的问题,请参考以下文章

来自 Pandas Dataframe 的 Seaborn 小提琴图,每列都有自己单独的小提琴图

C# Object to Json to Xml,如何为数组项生成xml元素

如何为给定的javascript生成调用图? [关闭]

如何为十亿张 png 图像生成统一的缩略图?

如何为用作 DataGrid 的 ItemsSource 的项目的集合属性中的每个项目生成和绑定一列

如何为 CNN 的每个班级获得 0 到 1 之间的分数?