ax.set_title(teams[i], fontsize=20) # fill in the bin statistics from df and plot the heatmap bin_statistic['statistic'] = df.loc[df.Squad == teams[i], pressure_cols].values heatmap = pitch.heatmap(bin_statistic, ax=ax, cmap='coolwarm', vmin=vmin, vmax=vmax) # format and plot labels bin_statistic['statistic'] = (pd.DataFrame( bin_statistic['statistic']).round(0).astype( np.int32).applymap(lambda x: '{:d}%'.format(x)).values) annotate = pitch.label_heatmap(bin_statistic, color='white', fontsize=20, ax=ax, ha='center', va='center') # set a black path effect around the labels for label in annotate: label.set_path_effects([ path_effects.Stroke(linewidth=3, foreground='black'), path_effects.Normal() ]) axes = axes.reshape(4, 5) cbar = fig.colorbar(heatmap, ax=axes[:, 4], shrink=0.85) cbar.ax.tick_params(labelsize=20) # if its the Bundesliga remove the two spare pitches if len(teams) == 18: for ax in axes[-1, 3:]: ax.remove()
teams = df['Squad'].values vmin = df[pressure_cols].min().min() # we normalise the heatmaps with the min / max values vmax = df[pressure_cols].max().max() for i, ax in enumerate(axs['pitch'].flat[:len(teams)]): # the top of the StatsBomb pitch is zero # plot the title half way between zero and -20 (the top padding) ax.text(60, -10, teams[i], ha='center', va='center', fontsize=50, fontproperties=fm.prop) # fill in the bin statistics from df and plot the heatmap bin_statistic['statistic'] = df.loc[df.Squad == teams[i], pressure_cols].values heatmap = pitch.heatmap(bin_statistic, ax=ax, cmap='coolwarm', vmin=vmin, vmax=vmax) annotate = pitch.label_heatmap(bin_statistic, color='white', fontproperties=fm.prop, path_effects=path_eff, fontsize=50, ax=ax, str_format='{0:.0f}%', ha='center', va='center') # if its the Bundesliga remove the two spare pitches if len(teams) == 18: for ax in axs['pitch'][-1, 3:]: ax.remove() # add cbar axes cbar_bottom = axs['pitch'][-1, 0].get_position().y0 cbar_left = axs['pitch'][0, -1].get_position().x1 + 0.01 ax_cbar = fig.add_axes((cbar_left, cbar_bottom, CBAR_WIDTH, # take a little bit off the height because of padding GRID_HEIGHT - 0.036)) cbar = plt.colorbar(heatmap, cax=ax_cbar) for label in cbar.ax.get_yticklabels():