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

代码报错ValueError: 'label'长度不符,饼图显示异常求解决

解决ValueError: 'label' must be of length 'x' 问题

错误原因

  1. 长度不匹配:df['source'].unique()会包含数据中的缺失值(NaN),但df["source"].value_counts()默认自动忽略缺失值,导致标签列表src的长度比频率列表src_freq多1,触发长度不匹配的ValueError。
  2. 顺序错位:unique()返回的是类别在数据中首次出现的顺序,而value_counts()是按频率从高到低排序,两者顺序不一致,就算没报错,饼图的标签也会和对应饼块错位。

解决方法

直接从value_counts()的结果中同时提取标签和频率,保证两者的长度和顺序完全匹配:

修改后的完整代码

# 替换原有的src_freq和src定义逻辑
src_counts = df["source"].value_counts()
src_freq = src_counts.values.tolist()
src = src_counts.index.tolist()

def make_autopct(values):
    def my_autopct(pct):
        total = sum(values)
        val = int(round(pct*total/100.0))
        return '{p:.1f}%  '.format(p=pct)
    return my_autopct

# 先创建画布再绘图,最后统一展示
fig, ax = plt.subplots(2,1, figsize=(8,8))
ax[0].pie(src_freq, autopct=make_autopct(src_freq), labels=src)
ax[0].set_title("Percentage count of source", fontsize=15)

sns.countplot(y='source', data=df, ax=ax[1])
plt.show()

关键说明

  • src_counts.index是value_counts()结果对应的类别标签,和频率值src_counts.values一一对应,长度完全一致,彻底解决长度不匹配问题。
  • 标签顺序和频率排序完全同步,饼图的标签与对应饼块能正确匹配,符合预期输出效果。
  • 将plt.show()移到代码最后,避免先弹出空绘图窗口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:27:21