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

如何在Seaborn多图表中保留列-颜色关联?附示例代码

解决方案

要保留Plot 1中的列与颜色的对应关系,你可以通过创建列名到颜色的映射字典来实现,无需手动指定十六进制颜色码,步骤如下:

  1. 获取Seaborn默认调色板的颜色,对应原DataFrame(df_1)的列顺序生成颜色映射
  2. 绘制Plot 2时,将这个映射字典传入palette参数

修改后的完整代码

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

np.random.seed(42)

df_1 = pd.DataFrame(np.random.rand(5, 5), columns=['A', 'B', 'C', 'D', 'E'])
df_2 = df_1.drop(['B', 'D'], axis=1)

# --- Plot 1 ---
sns.boxplot(data=df_1, orient="h")
plt.show()

# 创建列名-颜色映射字典:对应df_1的列顺序分配默认调色板颜色
color_map = dict(zip(df_1.columns, sns.color_palette()))

# --- Plot 2 ---
sns.boxplot(data=df_2, orient="h", palette=color_map)
plt.show()

原理说明

  • Seaborn默认会按当前数据的列顺序,循环使用默认调色板的颜色。当你删除B和D列后,原C、E会被分配调色板中靠前的颜色,导致颜色对应关系改变。
  • 通过zip(df_1.columns, sns.color_palette()),我们把原DataFrame的每一列和默认调色板的颜色一一绑定,生成映射字典。绘制Plot 2时,Seaborn会根据列名匹配对应的颜色,这样C会保持绿色,E保持紫色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:05:02