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

如何为Pandas DataFrame中各Kanton生成Kat标签颜色统一的饼图?

实现同一Kat值在不同Kanton饼图中颜色一致的方法

需求:我有一个Pandas DataFrame,想要为每个'Kanton'生成一张饼图,展示'Kat'字段值的出现频率。但不是所有'Kat'值都会出现在每个'Kanton'中,需要让相同的'Kat'值始终对应相同的颜色。

原始代码:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'Kanton': ['AG', 'AG', 'AG', 'AG', 'AG', 'AG', 'AG', 'ZH', 'ZH', 'ZH', 'ZH', 'ZH', 'ZH'],
           'Kat': [1,4,5,6,1,4,2,3,3,3,2,5,1]})

kantone=df['Kanton'].unique()

for i in kantone:
   print(i)
   df_n=df.loc[df['Kanton'] == i, 'Kat'].value_counts()

   print(df_n)

   #define data
   data = df_n
   labels = df_n.index.values

   #plot
   plt.pie(data, labels = labels, autopct='%.0f%%')
   plt.title("Kanton " + i)
   plt.show()

解决方法:
核心思路是提前为所有可能的Kat值分配固定颜色,绘制每个饼图时从这个全局颜色映射中提取对应颜色,就能保证同一Kat值颜色一致。

步骤如下:

  • 先获取DataFrame中所有唯一的Kat值,创建一个颜色映射字典(键为Kat值,值为对应的颜色)
  • 遍历每个Kanton时,根据当前Kanton包含的Kat值,从颜色映射中筛选出对应的颜色列表
  • 绘制饼图时通过colors参数传入该颜色列表

修改后的完整代码:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm

df = pd.DataFrame({'Kanton': ['AG', 'AG', 'AG', 'AG', 'AG', 'AG', 'AG', 'ZH', 'ZH', 'ZH', 'ZH', 'ZH', 'ZH'],
           'Kat': [1,4,5,6,1,4,2,3,3,3,2,5,1]})

# 获取所有唯一的Kat值,创建全局颜色映射
all_kats = df['Kat'].unique()
# 使用matplotlib的colormap生成颜色,也可以手动指定颜色列表
cmap = cm.get_cmap('tab10', len(all_kats))
color_map = {kat: cmap(i) for i, kat in enumerate(all_kats)}

kantone = df['Kanton'].unique()

for kanton in kantone:
    print(kanton)
    df_n = df.loc[df['Kanton'] == kanton, 'Kat'].value_counts()
    print(df_n)
    
    data = df_n
    labels = df_n.index.values
    # 提取当前Kanton中Kat值对应的颜色
    colors = [color_map[kat] for kat in labels]
    
    plt.pie(data, labels=labels, autopct='%.0f%%', colors=colors)
    plt.title(f"Kanton {kanton}")
    plt.show()

说明:

  • 这里用tab10色系生成颜色,你也可以替换成其他colormap(比如viridis),或者手动定义颜色列表(如['#FF0000', '#00FF00', ...])
  • 颜色映射字典color_map会把每个Kat值和固定颜色绑定,不管该Kat值出现在哪个Kanton中,颜色都不会变
  • 循环中通过列表推导式[color_map[kat] for kat in labels]获取当前饼图需要的颜色列表,确保只包含当前Kanton存在的Kat值对应的颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:03:22