axis=False, title_height=0.08, grid_height=0.84) # cycle through the grid axes and plot the player pass maps for idx, ax in enumerate(axs['pitch'].flat): # only plot the pass maps up to the total number of players if idx < num_players: # filter the complete/incomplete passes for each player (excudes throw-ins) lineup_player = lineup_team.iloc[idx] player_id = lineup_player.player_id player_pass = passes_excl_throw[passes_excl_throw.player_id == player_id] complete_pass = player_pass[player_pass.outcome_name.isnull()] incomplete_pass = player_pass[player_pass.outcome_name.notnull()] # plot the arrows pitch.arrows(complete_pass.x, complete_pass.y, complete_pass.end_x, complete_pass.end_y, color='#56ae6c', width=2, headwidth=4, headlength=6, ax=ax) pitch.arrows(incomplete_pass.x, incomplete_pass.y, incomplete_pass.end_x, incomplete_pass.end_y, color='#7065bb', width=2, headwidth=4, headlength=6, ax=ax) # plot the title for each player axis # here we use f-strings to combine the variables from the dataframe and text # we plot the title at x=0, y=-5 # this is the left hand-side of the pitch (x=0) and between # top of the y-axis (y=0) and the top of the padding (y=-10, remember pad_top = 10) # note that the StatsBomb y-axis is inverted, so you may need # to change this if you use another pitch_type (e.g. 'uefa'). # We also use the highlight-text package to highlight complete_pass green # so put <> around the number of completed passes. total_pass = len(complete_pass) + len(incomplete_pass)
############################################################################## # View the pass dataframe. df_pass.head() ############################################################################## # Plotting # Setup the pitch pitch = Pitch(pitch_type='statsbomb', pitch_color='#22312b', line_color='#c7d5cc') fig, ax = pitch.draw(figsize=(16, 11), constrained_layout=True, tight_layout=False) # Plot the completed passes pitch.arrows(df_pass[mask_complete].x, df_pass[mask_complete].y, df_pass[mask_complete].end_x, df_pass[mask_complete].end_y, width=2, headwidth=10, headlength=10, color='#ad993c', ax=ax, label='completed passes') # Plot the other passes pitch.arrows(df_pass[~mask_complete].x, df_pass[~mask_complete].y, df_pass[~mask_complete].end_x, df_pass[~mask_complete].end_y, width=2, headwidth=6, headlength=5, headaxislength=12, color='#ba4f45', ax=ax, label='other passes') # setup the legend ax.legend(facecolor='#22312b', handlelength=5, edgecolor='None', fontsize=20, loc='upper left') # Set the title ax.set_title(f'{team1} passes vs {team2}', fontsize=30) # Set the figure facecolor