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

如何制作两个分组列的组合直方图,按各球队叠加主客场得分分布

需求说明

我手头有英超赛事数据集,想要为每支球队分别叠加绘制主场、客场的得分直方图,目前已经可以单独生成主客场的直方图,对应代码如下,但需要将同一只球队的两个直方图合并展示在同一坐标系下。

单独绘制客场得分直方图的代码:

df_EPL['Away_score'].hist(by=df_EPL['AwayTeam'],figsize = (8,8),color = '#96ddff');

单独绘制主场得分直方图的代码:

df_EPL['Home_score'].hist(by=df_EPL['HomeTeam'],figsize = (8,8),color = '#82c065');

实现方案(新手友好版)

我们可以先取出所有球队的唯一值,循环遍历每支球队分别筛选主客场得分,叠加绘制即可:

import matplotlib.pyplot as plt
import math

# 取出所有球队的去重列表
teams = sorted(df_EPL['HomeTeam'].unique())
team_total = len(teams)
# 按球队总数调整画布行列参数,20支球队建议设4列、5行
cols = 4
rows = math.ceil(team_total / cols)

# 初始化网格画布
fig, axes = plt.subplots(rows, cols, figsize=(16, 16))
axes = axes.flatten() # 把二维坐标轴数组转成一维方便遍历

for idx, team in enumerate(teams):
    ax = axes[idx]
    # 筛选当前球队的主客场得分
    home_scores = df_EPL[df_EPL['HomeTeam'] == team]['Home_score']
    away_scores = df_EPL[df_EPL['AwayTeam'] == team]['Away_score']
    # 叠加绘制两个直方图
    ax.hist(home_scores, color='#82c065', alpha=0.6, label='主场得分')
    ax.hist(away_scores, color='#96ddff', alpha=0.6, label='客场得分')
    ax.set_title(f'{team}得分分布')
    ax.legend()

# 隐藏多余的空白子图
for idx in range(team_total, len(axes)):
    axes[idx].axis('off')

plt.tight_layout()
plt.show()
  • alpha参数用来设置直方图的透明度,建议设置为0.5~0.7区间,避免两个直方图互相遮挡,更方便对比分布差异
  • 如果需要固定得分区间对齐,可以给hist方法加bins参数,例如bins=range(0, 8),让主客场的柱子区间完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:09:03