如何在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
相关产品推荐
相关产品推荐

