如何为每个班级和小组生成单独的小提琴图
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.violinplot
或seaborn.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.catplot
和kind='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元素