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

为多个饼图统一颜色的最优高效实现方案

多饼图标签颜色统一的最优高效实现方案

要实现不同饼图中同一标签颜色一致,最高效的方式是构建全局的「标签-颜色」映射字典,结合matplotlib的颜色映射生成足够多的区分色,确保100个标签都有唯一对应颜色。具体实现步骤如下:

  • 收集所有饼图的唯一标签:把所有饼图的标签列表合并后去重,得到完整的标签集合,确保每个标签只分配一次颜色。
  • 生成标签-颜色映射:使用matplotlib的颜色映射(如hsv或rainbow)生成与唯一标签数量匹配的颜色序列,再将标签和颜色一一对应存入字典,适配大量标签的颜色区分需求。
  • 绘制饼图时调用颜色映射:每个饼图绘制时,根据自身的标签列表,从映射字典中提取对应的颜色列表,传递给pie函数的colors参数。

修改后的完整代码

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

# 原始数据
labels1 = ['John', 'Jerry', 'Sharon']
labels2 = ['Jerry', 'Sharon', 'Shaun']
y1 = [12, 8, 5]
y2 = [10, 5, 10]

# ---------------------- 核心颜色映射构建 ----------------------
# 收集所有唯一标签
all_labels = list(set(labels1 + labels2))
# 生成对应数量的颜色(hsv映射支持大量标签的颜色区分)
cmap = plt.cm.get_cmap('hsv', len(all_labels))
# 构建标签-颜色字典
label_color_map = {label: cmap(i) for i, label in enumerate(all_labels)}

# ---------------------- 绘图部分 ----------------------
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(15, 20))
fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.95,
                    wspace=0.1, hspace=0.2)

ax1 = axs[0,0]
ax2 = axs[0,1]

# 绘制时从映射字典中提取对应颜色
ax1.pie(y1, labels=labels1, colors=[label_color_map[label] for label in labels1])
ax2.pie(y2, labels=labels2, colors=[label_color_map[label] for label in labels2])

plt.show()

补充说明

  • 颜色映射选择:针对100个标签,hsv、rainbow这类循环色彩映射能提供足够的区分度;若偏好柔和配色,可替换为viridis或plasma。
  • 扩展性:新增饼图或标签时,只需更新all_labels的合并逻辑,映射字典会自动适配,无需手动调整颜色分配。
  • 高效性:标签去重、颜色生成和字典查找均为线性时间复杂度,处理100个标签完全无性能压力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:57:15