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

如何在Python Pandas绘图中添加图形?NHL射门图冰场线条绘制需求

当然可以实现!用Pandas+Matplotlib叠加冰球场地线条的方法

完全没问题!Pandas的绘图功能是基于Matplotlib封装的,所以你可以在已经生成的射门图基础上,直接调用Matplotlib的底层API来添加任意自定义图形(包括你需要的圆形和直线),完美适配你的NHL射门图需求。

核心思路

Pandas的plot()方法会返回Matplotlib的Axes对象,我们可以通过这个对象来叠加绘制任何Matplotlib支持的图形元素,包括圆形、直线、矩形等。

具体实现步骤

1. 先绘制你的基础射门图

假设你已经有了包含射门坐标的DataFrame,先生成基础的射门散点图,并获取对应的Axes对象:

import pandas as pd
import matplotlib.pyplot as plt

# 替换成你的真实射门数据
shot_df = pd.DataFrame({
    'shot_x': [22, 30, 178, 185],
    'shot_y': [40, 52, 48, 35]
})

# 绘制基础射门图,保存Axes对象用于后续绘图
ax = shot_df.plot(kind='scatter', x='shot_x', y='shot_y', color='#ff4444', label='Shots', s=50)

2. 匹配NHL场地的坐标范围

NHL标准冰场的尺寸大概是200英尺长(x轴范围0-200)、85英尺宽(y轴范围0-85),先调整坐标轴确保场地比例正确,避免图形变形:

# 设置坐标轴范围,贴合真实场地
ax.set_xlim(0, 200)
ax.set_ylim(0, 85)
# 强制保持宽高比一致,防止场地线条变形
ax.set_aspect('equal')

3. 添加圆形元素

用ax.add_patch()方法添加圆形,你可以根据NHL场地规则调整圆心坐标和半径:

# 添加场地中心圈(圆心在场地中点(100, 42.5),半径15英尺)
center_circle = plt.Circle((100, 42.5), 15, color='#0066cc', fill=False, linewidth=2)
ax.add_patch(center_circle)

# 添加左侧球门区的圆形(比如圆心在(25, 42.5),半径8英尺)
left_goal_circle = plt.Circle((25, 42.5), 8, color='#0066cc', fill=False, linewidth=2)
ax.add_patch(left_goal_circle)

4. 添加直线元素

用ax.plot()方法绘制直线,传入直线的起点和终点坐标即可:

# 添加左侧蓝线(x=75,贯穿整个场地宽度)
ax.plot([75, 75], [0, 85], color='#0066cc', linewidth=2)
# 添加右侧蓝线(x=125,贯穿整个场地宽度)
ax.plot([125, 125], [0, 85], color='#0066cc', linewidth=2)

5. 优化图形细节

最后可以添加标题、坐标轴标签和图例,让你的射门图更清晰:

ax.set_title('NHL Game Shot Chart with Rink Layout')
ax.set_xlabel('Ice Rink X Position (ft)')
ax.set_ylabel('Ice Rink Y Position (ft)')
plt.legend()
plt.show()

小提示

  • 如果你使用的射门数据坐标和标准场地坐标不匹配,记得先做坐标转换,确保线条和射门点位置对应
  • 可以通过调整linewidth、color、linestyle等参数,让场地线条更贴合真实NHL场地的样式
  • 如果不想圆形遮挡射门点,一定要设置fill=False让圆形只显示轮廓

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:38:29