首页 > 解决方案 > 绘制复选框问题:在同一图表上组合多个 catplots

问题描述

我有一些来自我想绘制的“复选框问题”的数据。通过“复选框问题”,我的意思是可以检查多个提议的选项。我使用的系统通过为每个提议的选项创建一列来处理这类问题。如果相应的受访者检查了答案,它会在该列的单元格中放置一个“Y”。因此,数据框如下所示:

年龄 选项1 选项2
12
99
28
32

Seaborn 很容易让我分别“绘制”每个选项。带有蜂群图的示例代码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

df = pd.DataFrame({'Age': [12, 99, 28, 32], 'Option1': ['Y', np.NaN, 'Y', np.NaN], 'Option2': ['Y', 'Y', np.NaN, np.NaN]})
sns.catplot(x="Option1", y="Age", kind="swarm", data=df)
plt.show()

一旦所有地块合并(可能使用子图),这将给我以下结果:当前解决方案的可能结果:

我想做的是将所有选项的 catplots 组合到一个图中,但我想避免基于网格的子图,而是将图直接组合到同一个图形“区域”上,每个选项有一个 x 轴刻度。期望的结果如下:

在此处输入图像描述

我该怎么做?

标签: pythonmatplotlibseaborn

解决方案


也许melt首先使用重塑您的数据:

sns.set_style('whitegrid')
...
df = df.melt(id_vars='Age', var_name='Option').dropna()

color = sns.color_palette()[0]
sns.catplot(x='Option', y='Age', kind='swarm', data=df, color=color)

输出:

在此处输入图像描述


推荐阅读