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

如何绘制标签为字符串而非整数的系列饼图?

如何绘制带字符串分类标签的饼图

你当前代码会报错,核心原因是labels是字符串类型(比如'1b'、'4'),但你在取颜色时写了colors=[colors[k-1] for k in labels]——字符串没法和整数做减法运算,自然会抛出类型错误。下面给你两种可行的修正方案:

方案一:全局统一标签颜色(推荐)

给所有唯一的Kat标签建立索引映射,保证不同Kanton下的相同标签用同一种颜色,视觉上更统一:

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

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

# 给所有唯一的Kat标签建立索引映射,确保相同标签对应同一颜色
all_unique_kats = df['Kat'].unique()
kat_index_map = {kat: idx for idx, kat in enumerate(all_unique_kats)}
# 生成对应数量的颜色
colors = sns.color_palette("bright", len(all_unique_kats))

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

for kanton in kantone:
    # 筛选当前州的标签并统计数量
    current_data = df.loc[df['Kanton'] == kanton, 'Kat'].value_counts()
    labels = current_data.index.values
    
    # 通过映射获取每个标签对应的颜色
    pie_colors = [colors[kat_index_map[kat]] for kat in labels]
    
    plt.pie(current_data, labels=labels, colors=pie_colors, autopct='%.0f%%')
    plt.title(f"Kanton {kanton}")
    plt.show()

方案二:仅当前州标签分配颜色

如果不需要全局统一颜色,只给当前Kanton的标签临时分配颜色,可以简化成这样:

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

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

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

for kanton in kantone:
    current_data = df.loc[df['Kanton'] == kanton, 'Kat'].value_counts()
    labels = current_data.index.values
    
    # 仅针对当前州的标签数量生成颜色
    pie_colors = sns.color_palette("bright", len(labels))
    
    plt.pie(current_data, labels=labels, colors=pie_colors, autopct='%.0f%%')
    plt.title(f"Kanton {kanton}")
    plt.show()

这种方式下,不同Kanton里的相同标签可能会用不同颜色,适合不需要跨组对比的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:40:04