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

