fig, ax = plt.subplots(figsize=(6.6, 4.6))
fld = Field(ax=ax, orient="horizontal", window=None, los=60, to_go=None)
field_extras(fld)
for t in ax.texts:
t.set_alpha(0.35)
def badge(cx, cy, pts, name, how, col):
ax.add_patch(FancyBboxPatch((cx - 20, cy - 6.4), 40, 12.8, boxstyle="round,pad=0.02,rounding_size=1.5",
fc=style.SURFACE, ec=col, lw=1.4, zorder=8))
ax.text(cx - 16.0, cy + 0.1, str(pts), fontsize=19, fontweight="bold", color=col, ha="center", va="center",
zorder=9)
ax.text(cx - 11.0, cy + 3.1, name, fontsize=7.6, fontweight="bold", color=style.INK, ha="left", va="center",
zorder=9)
ax.text(cx - 11.0, cy - 1.8, how, fontsize=6.4, color=style.INK_2, ha="left", va="center", zorder=9,
linespacing=1.15)
def lead(p0, p1):
ax.plot([p0[0], p1[0]], [p0[1], p1[1]], color=style.INK_2, lw=0.7, zorder=7)
TD, KICK, PATC, TRY, SAF = style.OFFENSE_DARK, style.THIRD, "#c2477a", "#7a5cc4", style.DEFENSE_DARK
ax.plot([95, 113], [46, 46], color=TD, lw=2.4, zorder=5, solid_capstyle="round") # a TD run, mid-play
arrow(ax, (110, 46), (114, 46), color=TD, lw=2.4, head=12)
football(ax, 95, 46, w=2.4, h=1.4)
football(ax, 87, MID, w=2.2, h=1.3) # extra point: snapped from the middle (a try may be spotted anywhere between the hashes)
arrow(ax, (87, MID), (121, MID), color=PATC, lw=1.2, ls=(0, (3, 2)))
ax.text(84.5, MID - 1.6, "snap from the 15, hold at\nthe 23: a 33-yard kick", fontsize=5.8, color=style.INK_2,
ha="right", va="top", zorder=6, bbox=dict(boxstyle="round,pad=0.1", fc=style.TURF, ec="none"))
football(ax, 108, HASH_NEAR, w=2.2, h=1.3) # two-point try from the 2, on a hash
arrow(ax, (108, HASH_NEAR), (114.5, HASH_NEAR), color=TRY, lw=2.0, head=11)
ax.plot([75, 75], [0, FIELD_WIDTH], color=style.OFFENSE_DARK, lw=1.0, alpha=0.6, zorder=2) # field goal
football(ax, 67, HASH_FAR, w=2.2, h=1.3)
arrow(ax, (67, HASH_FAR), (121, MID + 0.6), color=KICK, lw=1.2, ls=(0, (3, 2)), rad=-0.1)
ax.text(63.5, HASH_FAR + 0.3, "line of scrimmage: opp. 35\nhold at the 43: a 53-yard kick", fontsize=5.8,
color=style.INK_2, ha="right", va="center", zorder=6, bbox=dict(boxstyle="round,pad=0.1", fc=style.TURF, ec="none"))
draw_marker(ax, 5.2, 20.0, "off", "", 6, r=1.5) # safety: ball carrier tackled in his OWN end zone
draw_marker(ax, 8.2, 22.0, "def", "", 6, r=1.4)
football(ax, 5.2, 17.6, w=1.8, h=1.1)
ax.text(11.5, 21.0, "ball carrier tackled\nin his own end zone", fontsize=5.8, color=style.INK_2, ha="left", va="center",
zorder=6)
badge(104, 66, 6, "TOUCHDOWN", "ball breaks the plane\nof the goal line", TD)
lead((103, 59.6), (103, 46.9))
badge(60, 66, 3, "FIELD GOAL", "kick through the uprights,\nfrom anywhere", KICK)
lead((64, 59.6), (67, HASH_FAR + 1.0))
badge(106, -13, 2, "TWO-POINT TRY", "a run or pass from\nthe 2 after a TD", TRY)
lead((108, -6.6), (108, HASH_NEAR - 0.9))
badge(63, -13, 1, "EXTRA POINT (PAT)", "kick after a TD,\nsnapped from the 15", PATC)
lead((82, -6.6), (87, MID - 0.9))
badge(20, -13, 2, "SAFETY", "for the defense, plus the\nball on a free kick", SAF)
lead((8, -6.6), (5.2, 16.8))
arrow(ax, (20, 64), (36, 64), color=style.OFFENSE_DARK, lw=1.4)
ax.text(28, 68.5, "offense attacking", fontsize=6.8, color=style.OFFENSE_DARK, ha="center", va="center")
ax.text(4, 62, "offense's own\nend zone", fontsize=6.5, color=style.INK_2, ha="center", va="center")
lead((4, 59.2), (4, 54.5))
ax.set_xlim(-6, 129)
ax.set_ylim(-21, 74)
blank(ax)
plt.show()