如何在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
相关产品推荐
相关产品推荐

