小能豆

在箱线图中使用色调以外的其他元数据为 seaborn swarmplot 点着色

py

假设我有数据,我想将其绘制成箱线图并与 seaborn 中的群图叠加,其中点的颜色为数据添加了额外的信息。

问题:如何才能让箱线图对于给定的 x 轴值彼此接近(就像在色调中所做的那样),而无需将 x 重构为色调值和 x 轴值?

例如,在这里我想将点叠加到箱线图上,并希望这些点进一步着色‘sex’。示例:

plt.figure(figsize = (5, 5))

sns.boxplot(x = 'class', y = 'age', 
            hue = 'embarked', dodge = True, data = df)


sns.swarmplot(x = 'class', y = 'age', 
              dodge = True,
              color = '0.25',

              hue = 'sex', data = df)

plt.legend(bbox_to_anchor = (1.5, 1))

编辑:我们的想法是在图中得到一些看起来像“第三”的“S”框的东西(我在 powerpoint 中做了一个假的例子,所以hue在和中都是相同的boxplotswarmplot以将点叠加在相应的框上)。

1.png

有没有办法制作这个图,而不用先将 x 轴重构为“first-S”、“first-C”、“first-Q”、“second-S”等,然后在两个图中hue添加?’sex’


阅读 24

收藏
2024-12-04

共1个答案

小能豆

为了实现您的目标,即在箱线图中叠加群图,并使得群图点的颜色根据额外信息(如'sex')着色,同时避免重构 x 轴,可以通过调整点的位置使其匹配箱线图的位置,同时通过颜色区分群图点的额外属性。

下面是一个示例代码实现:

示例代码:

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

# 使用 Titanic 数据集作为示例
df = sns.load_dataset('titanic')

plt.figure(figsize=(10, 6))

# 绘制箱线图,使用 'class' 和 'embarked' 作为 x 和 hue
sns.boxplot(
    x='class', y='age', 
    hue='embarked', dodge=True, 
    data=df, showfliers=False, palette="Set2"
)

# 获取箱线图中箱体的位置
# Seaborn's dodge effect offsets the x-axis positions for different hues
positions = []
for i, group in enumerate(df['class'].unique()):
    group_data = df[df['class'] == group]['embarked'].dropna().unique()
    positions += [(i - 0.2 + j * 0.4 / len(group_data)) for j in range(len(group_data))]

# 绘制群图点,颜色按 'sex' 区分
sns.swarmplot(
    x='class', y='age', 
    hue='sex', data=df, 
    dodge=True, palette='cool', 
    alpha=0.7
)

# 调整图例
handles, labels = plt.gca().get_legend_handles_labels()
plt.legend(handles[:len(df['embarked'].unique())], 
           labels[:len(df['embarked'].unique())], 
           title='Embarked', bbox_to_anchor=(1.05, 1))

plt.show()

实现说明:

  1. 箱线图和群图的叠加
  2. 使用 dodge=True 参数使得箱线图和群图根据不同的 hue 值对数据进行偏移(默认分隔开箱图的位置)。

  3. 点的颜色与额外信息挂钩

  4. swarmplot 中,添加额外的 hue='sex' 并指定 palette,从而为点提供基于性别的颜色区分。

  5. 对齐点和箱体

  6. 通过调整 positions,使得群图点的 x 坐标与箱线图箱体对齐。

如果需要进一步调整点的对齐或分布,可以通过控制 dodgewidth 等参数来微调外观。这个方法避免了对 x 轴的重构,同时实现了按群体特征区分的箱线图和群图的叠加效果。

2024-12-04