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

使用Python+mplsoccer绘制足球射门地图 主客队射门分侧展示实现方案

足球射门地图双队分侧绘制解决方案

问题根因

  • 现有代码的if判断仅检查数据集内是否存在主队/客队数据,未按H/A字段筛选对应的数据子集,导致每次绘制都会输出全量射门点位
  • 直接调用invert_xaxis()会全局翻转坐标轴,已绘制的主队点位会被同步翻转,无法实现分侧展示的需求

修正方案

提前拆分主客队独立数据子集,客队点位直接做x轴坐标镜像转换,无需全局翻转坐标轴,避免影响已绘制内容,修正后代码如下:

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from mplsoccer.pitch import Pitch

text_color = 'w'
data = pd.read_csv('shotmaps.csv')

# 按主客场字段拆分数据
home_data = data[data['H/A'] == 'h']
away_data = data[data['H/A'] == 'a']

fig, ax = plt.subplots(figsize=(13,8.5))
fig.set_facecolor('#22312b')
ax.patch.set_facecolor('#22312b')

# 绘制标准球场
pitch = Pitch(half=False, positional=True, shade_middle=True, positional_color='black', line_color='black', axis=True, label=True, tick=True)
pitch.draw(ax=ax)

plt.title('曼联 vs 纽卡斯尔联', fontsize=24, c=text_color)

# 绘制主队(曼联)射门点位,分布在球场右侧
plt.scatter(home_data['x-coordinate']*120, home_data['y-coordinate']*80, c = '#ea6969', s=70, label='曼联')
# 绘制客队(纽卡斯尔联)射门点位,x坐标镜像转换后分布在球场左侧
plt.scatter(120 - away_data['x-coordinate']*120, away_data['y-coordinate']*80, c = 'blue', s=70, label='纽卡斯尔联')

# 可选添加图例区分队伍
plt.legend(fontsize=12)
plt.show()

核心调整说明

  • 用布尔索引拆分主客队独立数据集,每次仅绘制对应队伍的射门点位
  • 客队x坐标通过120 - x*120做镜像映射,直接对应到球场左侧半场,无需全局翻转坐标轴
  • 额外添加了图例配置,可直观区分两队点位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:18:02