New custom module for statsbomb pitch
This commit is contained in:
parent
40be8d27f9
commit
5e3059b363
193
StatsbombPitch.py
Normal file
193
StatsbombPitch.py
Normal file
@ -0,0 +1,193 @@
|
||||
#!/usr/bin/env python
|
||||
# coding: utf-8
|
||||
|
||||
# In[1]:
|
||||
|
||||
|
||||
import json
|
||||
import os
|
||||
from pandas.io.json import json_normalize
|
||||
import numpy as np
|
||||
import seaborn as sns
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.patches import Arc, Rectangle, ConnectionPatch
|
||||
from matplotlib.offsetbox import OffsetImage
|
||||
#import squarify
|
||||
from functools import reduce
|
||||
|
||||
|
||||
# In[273]:
|
||||
|
||||
|
||||
def sb_pitch(pitch, line, orientation,view):
|
||||
|
||||
orientation = orientation
|
||||
view = view
|
||||
line = line
|
||||
pitch = pitch
|
||||
|
||||
if orientation.lower().startswith("h"):
|
||||
|
||||
if view.lower().startswith("h"):
|
||||
fig,ax = plt.subplots(figsize=(8.0,12.0))
|
||||
plt.xlim(-1,121)
|
||||
plt.ylim(-1,81)
|
||||
else:
|
||||
fig,ax = plt.subplots(figsize=(10.4,6.8))
|
||||
plt.xlim(-1,121)
|
||||
plt.ylim(-1,81)
|
||||
ax.axis('off') # this hides the x and y ticks
|
||||
|
||||
# side and goal lines #
|
||||
ly1 = [0,0,80,80,0]
|
||||
lx1 = [0,120,120,0,0]
|
||||
|
||||
plt.plot(lx1,ly1,color=line,zorder=5)
|
||||
|
||||
|
||||
# boxes, 6 yard box and goals
|
||||
|
||||
#outer boxes#
|
||||
ly2 = [18,18,62,62]
|
||||
lx2 = [120,102,102,120]
|
||||
plt.plot(lx2,ly2,color=line,zorder=5)
|
||||
|
||||
ly3 = [18,18,62,62]
|
||||
lx3 = [0,18,18,0]
|
||||
plt.plot(lx3,ly3,color=line,zorder=5)
|
||||
|
||||
#goals#
|
||||
ly4 = [36,36,44,44]
|
||||
lx4 = [120,120.4,120.4,120]
|
||||
plt.plot(lx4,ly4,color=line,zorder=5)
|
||||
|
||||
ly5 = [36,36,44,44]
|
||||
lx5 = [0,-0.4,-0.4,0]
|
||||
plt.plot(lx5,ly5,color=line,zorder=5)
|
||||
|
||||
|
||||
#6 yard boxes#
|
||||
ly6 = [30,30,50,50]
|
||||
lx6 = [120,114,114,120]
|
||||
plt.plot(lx6,ly6,color=line,zorder=5)
|
||||
|
||||
ly7 = [30,30,50,50]
|
||||
lx7 = [0,6,6,0]
|
||||
plt.plot(lx7,ly7,color=line,zorder=5)
|
||||
|
||||
#Halfway line, penalty spots, and kickoff spot
|
||||
ly8 = [0,80]
|
||||
lx8 = [60,60]
|
||||
plt.plot(lx8,ly8,color=line,zorder=5)
|
||||
|
||||
|
||||
plt.scatter(60,40,color=line,zorder=5)
|
||||
plt.scatter(12,40,color=line,zorder=5)
|
||||
plt.scatter(108,40,color=line,zorder=5)
|
||||
|
||||
circle1 = plt.Circle((108.5,40), 9.15,ls='solid',lw=1.5,color=line, fill=False, zorder=1,alpha=1)
|
||||
circle2 = plt.Circle((12.5,40), 9.15,ls='solid',lw=1.5,color=line, fill=False, zorder=1,alpha=1)
|
||||
circle3 = plt.Circle((60, 40), 9.15,ls='solid',lw=1.5,color=line, fill=False, zorder=2,alpha=1)
|
||||
|
||||
## Rectangles in boxes
|
||||
rec1 = plt.Rectangle((102,18), 120,62,ls='-',color=pitch, zorder=1,alpha=1)
|
||||
rec2 = plt.Rectangle((0, 18), 18,62,ls='-',color=pitch, zorder=1,alpha=1)
|
||||
|
||||
## Pitch rectangle
|
||||
rec3 = plt.Rectangle((-1, -1), 122,82,ls='-',color=pitch, zorder=1,alpha=1)
|
||||
|
||||
ax.add_artist(rec3)
|
||||
ax.add_artist(circle1)
|
||||
ax.add_artist(circle2)
|
||||
ax.add_artist(rec1)
|
||||
ax.add_artist(rec2)
|
||||
ax.add_artist(circle3)
|
||||
|
||||
else:
|
||||
if view.lower().startswith("h"):
|
||||
fig,ax = plt.subplots(figsize=(10.4,6.8))
|
||||
plt.ylim(59,121)
|
||||
plt.xlim(-1,81)
|
||||
else:
|
||||
fig,ax = plt.subplots(figsize=(6.8,10.4))
|
||||
plt.ylim(-1,105)
|
||||
plt.xlim(-1,69)
|
||||
ax.axis('off') # this hides the x and y ticks
|
||||
|
||||
# side and goal lines #
|
||||
lx1 = [0,0,80,80,0]
|
||||
ly1 = [0,120,120,0,0]
|
||||
|
||||
plt.plot(lx1,ly1,color=line,zorder=5)
|
||||
|
||||
|
||||
# boxes, 6 yard box and goals
|
||||
|
||||
#outer boxes#
|
||||
lx2 = [18,18,62,62]
|
||||
ly2 = [120,102,102,120]
|
||||
plt.plot(lx2,ly2,color=line,zorder=5)
|
||||
|
||||
lx3 = [30,30,50,50]
|
||||
ly3 = [120,114,114,120]
|
||||
plt.plot(lx3,ly3,color=line,zorder=5)
|
||||
|
||||
#goals#
|
||||
lx4 = [36,36,44,44]
|
||||
ly4 = [120,120.4,120.4,120]
|
||||
plt.plot(lx4,ly4,color=line,zorder=5)
|
||||
|
||||
lx5 = [30.34,30.34,37.66,37.66]
|
||||
ly5 = [0,-0.2,-0.2,0]
|
||||
#plt.plot(lx5,ly5,color=line,zorder=5)
|
||||
|
||||
|
||||
#6 yard boxes#
|
||||
lx6 = [24.84,24.84,43.16,43.16]
|
||||
ly6 = [104,99.5,99.5,104]
|
||||
#plt.plot(lx6,ly6,color=line,zorder=5)
|
||||
|
||||
lx7 = [36,36,44,44]
|
||||
ly7 = [0,4.5,4.5,0]
|
||||
# plt.plot(lx7,ly7,color=line,zorder=5)
|
||||
|
||||
#Halfway line, penalty spots, and kickoff spot
|
||||
lx8 = [0,80]
|
||||
ly8 = [120,120]
|
||||
plt.plot(lx8,ly8,color=line,zorder=5)
|
||||
|
||||
|
||||
#plt.scatter(34,93,color=line,zorder=5)
|
||||
plt.scatter(40,108,color=line,zorder=5)
|
||||
plt.scatter(40,60,color=line,zorder=5)
|
||||
|
||||
circle1 = plt.Circle((40,108), 9.15,ls='solid',lw=1.5,color=line, fill=False, zorder=1,alpha=1)
|
||||
circle2 = plt.Circle((40,108), 9.15,ls='solid',lw=1.5,color=line, fill=False, zorder=1,alpha=1)
|
||||
circle3 = plt.Circle((40,60), 9.15,ls='solid',lw=1.5,color=line, fill=False, zorder=2,alpha=1)
|
||||
|
||||
## Rectangles in boxes
|
||||
rec1 = plt.Rectangle((18, 102), 62,120,ls='-',color=pitch, zorder=1,alpha=1)
|
||||
rec2 = plt.Rectangle((20, 0), 30,16.5,ls='-',color=pitch, zorder=1,alpha=1)
|
||||
|
||||
## Pitch rectangle
|
||||
rec3 = plt.Rectangle((-1, -1), 82,122,ls='-',color=pitch, zorder=1,alpha=1)
|
||||
|
||||
ax.add_artist(rec3)
|
||||
ax.add_artist(circle1)
|
||||
ax.add_artist(circle2)
|
||||
ax.add_artist(rec1)
|
||||
ax.add_artist(rec2)
|
||||
ax.add_artist(circle3)
|
||||
#ax.add_artist(rightArc)
|
||||
|
||||
|
||||
# In[274]:
|
||||
|
||||
|
||||
"""call this for full horizontal pitch """
|
||||
#sb_pitch("#195905","#faf0e6","horizontal","full")
|
||||
|
||||
"""call this for half vertical pitch """
|
||||
#sb_pitch("#195905","#faf0e6","vertical","half")
|
||||
|
Loading…
Reference in New Issue
Block a user