如何为每个 class 和组生成单独的小提琴图
How to generate separate violinplots for each class and group
我有一个 pandas 数据框:
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 标签('Class 0' 和 'Class 1')并且每个 class 并为像 'B' 这样的预定义变量创建了小提琴图(里面有一个箱线图)。
使用seaborn,非常简单:
import seaborn as sns
...
sns.violinplot(x=df.Label, y=df.B)
- 您想将数据帧转换为具有
panda.DataFrame.melt
and then plot with seaborn.violinplot
or seaborn.catplot
的长格式。
pandas 1.3.0
、seaborn 0.11.1
、matplotlib 3.4.2
导入和 DataFrame
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)
我有一个 pandas 数据框:
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 标签('Class 0' 和 'Class 1')并且每个 class 并为像 'B' 这样的预定义变量创建了小提琴图(里面有一个箱线图)。
使用seaborn,非常简单:
import seaborn as sns
...
sns.violinplot(x=df.Label, y=df.B)
- 您想将数据帧转换为具有
panda.DataFrame.melt
and then plot withseaborn.violinplot
orseaborn.catplot
的长格式。 pandas 1.3.0
、seaborn 0.11.1
、matplotlib 3.4.2
导入和 DataFrame
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)