You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何叠加Seaborn relplot并匹配分组颜色?附示例代码

解决relplot叠加与颜色匹配问题

你需要的是把多个散点绘制在同一个坐标轴上,而不是生成多个独立的relplot(因为relplot会创建新的FacetGrid对象,无法直接叠加)。同时要保证ground点的颜色和分组颜色一致,我们可以通过以下步骤实现:

核心思路

  • 使用matplotlib的单轴对象承载所有散点,替代多次调用relplot
  • 利用seaborn自动分配的调色板,提取分组A/B对应的颜色,用于绘制ground点
  • 用scatterplot(relplot的底层函数)在同一轴上依次绘制所有元素

完整代码实现

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

data1 = """index x y group ground_x_A ground_y_A ground_x_B ground_y_B
0 27 26 A 20 15 40 45
1 26 27 A 20 15 40 45
2 28 22 A 20 15 40 45
3 25 24 A 20 15 40 45
4 29 31 A 20 15 40 45
5 46 29 B 20 15 40 45
6 39 37 B 20 15 40 45
7 38 41 B 20 15 40 45
8 44 46 B 20 15 40 45
9 46 38 B 20 15 40 45
10 37 33 B 20 15 40 45"""
df = pd.read_csv(StringIO(data1), index_col=[0], sep=" ", skipinitialspace=True)

sns.set_style("whitegrid")

# 创建画布和轴对象
fig, ax = plt.subplots(figsize=(8,6))

# 第一步:绘制主数据点,获取分组颜色
sns.scatterplot(data=df, x='x', y='y', hue='group', s=25, ax=ax)

# 获取分组对应的颜色:seaborn会按group的唯一值顺序分配颜色
# 这里group的唯一值是['A','B'],所以调色板的第一个颜色对应A,第二个对应B
palette = sns.color_palette()
color_A = palette[0]
color_B = palette[1]

# 第二步:绘制ground_A的点,用A的颜色,放大并改用不同标记区分
sns.scatterplot(data=df, x='ground_x_A', y='ground_y_A', s=100, color=color_A, 
                marker='X', label='Ground A', ax=ax)

# 第三步:绘制ground_B的点,用B的颜色,同样放大并标记区分
sns.scatterplot(data=df, x='ground_x_B', y='ground_y_B', s=100, color=color_B, 
                marker='X', label='Ground B', ax=ax)

# 调整图例位置和标题
ax.legend(title='Category', bbox_to_anchor=(1.05, 1), loc='upper left')

plt.tight_layout()
plt.show()

代码细节说明

  • 我们直接创建matplotlib的ax轴对象,所有绘图都在这个轴上完成,实现叠加效果
  • 通过sns.color_palette()获取当前样式下的调色板,由于group的唯一值是A、B,所以第一个颜色对应A,第二个对应B(如果你的group顺序不同,可以通过df['group'].unique()确认顺序)
  • 给ground点使用不同的标记(比如'X'),可以和主数据的圆形点区分开,同时保持颜色一致
  • 最后调整图例位置,避免遮挡数据

这样就能得到一个合并后的图,所有元素颜色匹配,而且在同一个画布中展示。

内容的提问来源于stack exchange,提问作者Ivo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:23:12