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

如何在matplotlib中为各图例项设置指定的对应颜色

Matplotlib/Seaborn 实现图例与指定类别固定颜色匹配

核心思路是提前建立类别和目标颜色的映射字典,绘图时强制调用这个映射规则,就能保证图内元素、图例的颜色完全和你要求的规则一致,不会出现库自动分配颜色导致的匹配错位问题。

首先定义通用的颜色映射规则,所有Python绘图库基本都支持这种字典格式的传参:

# 固定大洲与颜色的对应关系
color_match = {
    "Africa": "skyblue",
    "Europe": "gold",
    "Americas": "palegreen"
}

注:skyblue/gold/palegreen都是Matplotlib内置的合法颜色名,可直接识别使用,如果需要更精准的色调,也可以替换为对应十六进制色值。


Matplotlib 原生绘图实现

如果你是用Matplotlib原生接口绘图,只需要在绘制每个大洲的图形元素时,从映射字典中取对应颜色传入color参数,后续生成的图例会自动匹配对应颜色:

import matplotlib.pyplot as plt

# 替换为你自己的实际数据即可
x = [2018, 2019, 2020, 2021, 2022]
dataset = {
    "Africa": [12, 19, 23, 28, 33],
    "Europe": [25, 29, 31, 28, 26],
    "Americas": [18, 22, 27, 35, 42]
}

# 逐类绘图,绑定对应颜色
for region, y_val in dataset.items():
    # 折线图/柱状图/面积图都适用这个参数传法
    plt.plot(x, y_val, color=color_match[region], label=region, linewidth=2)

# 生成图例,颜色会自动和定义的规则一一对应
plt.legend()
plt.show()

Seaborn 绘图实现

Seaborn支持直接传入颜色映射字典,不需要手动循环绘图,只需要把定义好的映射传给palette参数即可:

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

# 替换为你自己的数据集,需要是长表格式
df = pd.DataFrame({
    "year": [2018,2019,2020,2021,2022]*3,
    "metric": [12,19,23,28,33, 25,29,31,28,26, 18,22,27,35,42],
    "region": ["Africa"]*5 + ["Europe"]*5 + ["Americas"]*5
})

# 绘图时直接传入自定义颜色映射
sns.lineplot(
    data=df,
    x="year",
    y="metric",
    hue="region",
    palette=color_match, # 绑定自定义颜色规则
    linewidth=2
)

plt.show()
  • 如果需要固定图例的显示顺序,可以额外加hue_order=["Africa", "Europe", "Americas"]参数,避免因数据排序问题导致图例顺序错乱。
  • 如果你的数据里还有其他大洲分类,只需要在color_match字典里补充对应的键值对即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:54:22