代码报错ValueError: 'label'长度不符,饼图显示异常求解决
解决ValueError: 'label' must be of length 'x' 问题
错误原因
- 长度不匹配:
df['source'].unique()会包含数据中的缺失值(NaN),但df["source"].value_counts()默认自动忽略缺失值,导致标签列表src的长度比频率列表src_freq多1,触发长度不匹配的ValueError。 - 顺序错位:
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
相关产品推荐
相关产品推荐

