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
相关产品推荐
相关产品推荐

