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

如何替换Seaborn Relplot中的图例并移除原始图例

解决Seaborn Relplot中移除原始图例并保留自定义图例的问题

问题原因

你当前的代码中,sns.relplot会自动生成一个原始图例,后续调用plt.legend()又创建了新的自定义图例,导致两个图例共存。由于legend=False会完全禁用所有图例生成,无法单独保留自定义图例,因此需要针对FacetGrid对象的原始图例进行单独操作。


方法一:移除原始图例后添加自定义图例

先获取relplot返回的FacetGrid对象,移除其自带的原始图例,再创建并修改自定义图例:

import seaborn as sns
import matplotlib.pyplot as plt

# 保存relplot返回的FacetGrid实例
g = sns.relplot(data=df_R_subject1, x="CDL-07_CO2", y="CDL-07_Ta", size="freshair_S1", hue="posture_S1",
                sizes=(200, 50), alpha=.5, palette="muted", height=6)

# 移除FacetGrid自带的原始图例
g._legend.remove()

# 创建自定义图例并修改文本
L = plt.legend(bbox_to_anchor=(1, 0.35), frameon=False)
L.get_texts()[0].set_text('Posture')
L.get_texts()[1].set_text('Standing')
L.get_texts()[2].set_text('Sitting')

L.get_texts()[3].set_text('Do you need fresh air?')
L.get_texts()[4].set_text('Yes')
L.get_texts()[5].set_text('No change')

plt.ylabel("Air temperature (°C)", fontsize=12)
plt.xlabel("CO2 concentration (ppm)", fontsize=12)

plt.show()

方法二:直接修改原始图例(更简洁)

无需额外创建图例,直接获取FacetGrid的原始图例对象,修改其文本和样式:

import seaborn as sns
import matplotlib.pyplot as plt

g = sns.relplot(data=df_R_subject1, x="CDL-07_CO2", y="CDL-07_Ta", size="freshair_S1", hue="posture_S1",
                sizes=(200, 50), alpha=.5, palette="muted", height=6)

# 获取原始图例对象
legend = g._legend
# 修改图例文本内容
legend.texts[0].set_text('Posture')
legend.texts[1].set_text('Standing')
legend.texts[2].set_text('Sitting')

legend.texts[3].set_text('Do you need fresh air?')
legend.texts[4].set_text('Yes')
legend.texts[5].set_text('No change')

# 调整图例位置与样式(可选)
legend.set_bbox_to_anchor((1, 0.35))
legend.set_frame_on(False)

plt.ylabel("Air temperature (°C)", fontsize=12)
plt.xlabel("CO2 concentration (ppm)", fontsize=12)

plt.show()

关键说明

  • sns.relplot返回的是FacetGrid对象,其自带的图例存储在_legend属性中,调用remove()可单独移除原始图例,不会影响后续创建的自定义图例。
  • 方法二更高效,直接复用原始图例结构,避免重复创建图例导致的冗余问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:05:17