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

seaborn绘制分组柱状图报错Could not interpret input 'percent'求助

报错原因

报错的核心原因是你传入sns.barplot的数据框里没有名为percent的字段,需要先对原始数据做聚合计算,得到每个Category下Item为true/false的占比之后,才能正常绘图。

另外你原始数据的Item列存在大小写不一致的问题(有小写false和大写False),需要先统一取值避免分组错误。


解决方法

方法1:先聚合计算占比,再用barplot绘图

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

# 第一步:统一Item列取值格式
DF['Item'] = DF['Item'].astype(str).str.lower()

# 第二步:分组统计占比
# 先统计每个Category下不同Item的数量
count_df = DF.groupby(['Category', 'Item']).size().reset_index(name='count')
# 按Category分组计算每个Item的占比
count_df['percent'] = count_df.groupby('Category')['count'].transform(lambda x: x / x.sum() * 100)

# 第三步:绘图
sns.barplot(data=count_df, x="Category", y="percent", hue="Item", order=["a", "b", "c"])
plt.ylabel('占比 (%)')
plt.show()

方法2:无需提前聚合,直接用histplot实现效果

seaborn的histplot支持直接统计百分比,不需要手动计算占比:

import seaborn as sns
import matplotlib.pyplot as plt

# 统一Item列取值格式
DF['Item'] = DF['Item'].astype(str).str.lower()

# 直接绘图,stat参数指定统计值为百分比,multiple参数指定分组柱状的排布方式
sns.histplot(data=DF, x='Category', hue='Item', stat='percent', multiple='dodge', shrink=0.8, order=["a", "b", "c"])
plt.ylabel('占比 (%)')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:03