/matplotsoccer

Package to visualize soccer data

Primary LanguageJupyter NotebookMIT LicenseMIT

matplotsoccer

This is a package to visualize soccer data

To install it simply

pip install matplotsoccer

1. Plotting a 108 x 65 soccer field with matplotsoccer.field():

You can also:

  • plot a green field with white lines instead of a white field with black lines
  • adjust the figure size
  • add a scatterplot
  • reactivate the axis.
matplotsoccer.field("green",figsize=8, show=False)
plt.scatter(x,y)
plt.axis("on")
plt.show()

2. Plotting a heatmap with matplotsoccer.heatmap()

hm = matplotsoccer.count(x,y,n=25,m=25) # Construct a 25x25 heatmap from x,y-coordinates
hm = scipy.ndimage.gaussian_filter(hm,1) # blur the heatmap
matplotsoccer.heatmap(hm) # plot the heatmap

The most important parameters are:

  • the color map (any color map accepted by matplotlib will work)
  • the color of the field lines
  • adding a colorbar to the right of the heatmap
matplotsoccer.heatmap(hm,cmap="hot",linecolor="white",cbar=True)

3. Plotting soccer event stream data with matplotsoccer.actions()

Here is an example of five actions in the SPADL format (see https://github.com/ML-KULeuven/socceraction) leading up to Belgium's second goal against England in the third place play-off in the 2018 FIFA world cup.

game_id period_id seconds team player start_x start_y end_x end_y actiontype result bodypart
8657 2 2179 Belgium Axel Witsel 37.1 44.8 53.8 48.2 pass success foot
8657 2 2181 Belgium Kevin De Bruyne 53.8 48.2 70.6 42.2 dribble success foot
8657 2 2184 Belgium Kevin De Bruyne 70.6 42.2 87.4 49.1 pass success foot
8657 2 2185 Belgium Eden Hazard 87.4 49.1 97.9 38.7 dribble success foot
8657 2 2187 Belgium Eden Hazard 97.9 38.7 105 37.4 shot success foot

Here is the phase visualized using matplotsoccer.actions()

matplotsoccer.actions(
    location=actions[["start_x", "start_y", "end_x", "end_y"]],
    action_type=actions.type_name,
    team=actions.team_name,
    result= actions.result_name == "success",
    label=actions[["time_seconds", "type_name", "player_name", "team_name"]],
    labeltitle=["time","actiontype","player","team"],
    zoom=False
)

(c) Tom Decroos 2019