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

Python技术请求:基于性别分组绘制分数分组条形图

解决方案

你的需求是绘制4组条形(男-分数、男-等级、女-分数、女-等级),原代码未达预期大概率是数据结构处理或绘图参数的问题,以下是两种可行解决办法:

方法1:Pandas原生绘图快速实现

如果你的DataFrame是宽表结构(gender为一列,score和grade各为独立列),直接将gender设为索引再绘图即可:

import matplotlib.pyplot as plt

# 将gender设为索引后绘图
data_gender.set_index('gender').plot(kind='bar', rot=0)
# 添加基础美化
plt.title('分数与等级按性别分布')
plt.ylabel('数值')
plt.show()

这样会自动生成每个性别对应分数、等级的两组条形,加起来正好4个,匹配你的需求。

方法2:转长表后用Seaborn绘图(更灵活)

如果需要自定义样式(比如调整颜色、图例位置),先把宽表转成长表结构,再用Seaborn分组绘制:

import seaborn as sns
import matplotlib.pyplot as plt

# 宽表转长表,将score和grade合并为统一的指标列
data_melted = data_gender.melt(id_vars='gender', var_name='指标', value_name='数值')

# 绘制分组条形图
sns.barplot(x='gender', y='数值', hue='指标', data=data_melted)
plt.title('分数与等级按性别分布')
plt.show()

这种方式可灵活调整绘图细节,同样能得到你要的4组条形。

原代码失效原因

你之前的data_gender.plot(x='gender',kind='bar', stacked=False)逻辑本身没问题,但如果你的DataFrame不是宽表(比如score和grade以行形式存储而非列),就会出现异常。另外将gender设为索引的方式,比直接指定x='gender'更直观,能避免结构适配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:54:27