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

如何用pyplot基于Pandas DataFrame绘制男女生分组条形图

分组条形图实现方案(优先推荐低代码方案)

零繁琐操作的最简实现:Pandas内置绘图接口

多数人觉得纯写pyplot画分组条形图麻烦,本质是要手动处理x轴偏移、条形宽度匹配、图例生成这些重复逻辑,完全可以借助pandas封装好的绘图能力,几行代码就能出对应效果:

  • 核心逻辑是让Team列作为绘图的分类索引,剩下的Boys、Girls列会自动被识别为分组序列
  • 不需要手动计算每个条形的位置,pandas会自动给同个分类下的多个序列分配合适的x轴偏移、配置图例、匹配颜色

示例代码:

import pandas as pd
import matplotlib.pyplot as plt

# 按实际需求替换数据集即可
data = {'Team': ['Sharks', 'Lions'], 'Boys': [5, 3], 'Girls': [5, 7]}
df = pd.DataFrame(data)

# 设置Team为索引后直接调用bar绘图方法
df.set_index('Team').plot.bar(rot=0)  # rot=0避免x轴标签自动倾斜,视觉更整洁
plt.ylabel('统计人数')
plt.show()

这个方法跑出来的效果和你要的“每个队伍对应两根分别代表男生、女生数量的条形”完全一致,不需要额外写样式调整代码。

纯pyplot实现方案(适合需要高度自定义样式的场景)

如果需要对图表的细节做个性化调整,也可以用原生pyplot实现,核心是用numpy生成基础x坐标,给两个分组的条形做对称偏移,不需要硬算位置:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

data = {'Team': ['Sharks', 'Lions'], 'Boys': [5, 3], 'Girls': [5, 7]}
df = pd.DataFrame(data)

bar_width = 0.35  # 单根条形的宽度
x_pos = np.arange(len(df['Team']))  # 给每个队伍生成中心x坐标

# 两根条形分别向中心坐标的左右做半个条形宽度的偏移,刚好并排摆放
plt.bar(x_pos - bar_width/2, df['Boys'], width=bar_width, label='Boys')
plt.bar(x_pos + bar_width/2, df['Girls'], width=bar_width, label='Girls')

# 把x轴标签放到两根条形的中心位置,避免错位
plt.xticks(x_pos, df['Team'])
plt.ylabel('统计人数')
plt.legend()
plt.show()

小提示:纯pyplot方案的灵活性更高,可以单独调整每根条形的边框、透明度、配色,但如果涉及多组数据、多个分类,手动调整偏移的工作量会快速上升,大部分日常场景下优先用Pandas内置绘图接口效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 18:27:02