Home > OS >  How to change matplotlib marker into a football icon?
How to change matplotlib marker into a football icon?

Time:12-04

I have visualization like this:

enter image description here

I want to change the marker icon into a football icon with the same color as the line

My code looks like this :

fig, ax = plt.subplots(figsize=(12,6))

ax.step(x = a_df['minute'], y = a_df['a_cum'], where = 'post', label= ateam, linewidth=2)
ax.step(x = h_df['minute'], y = h_df['h_cum'], where = 'post', color ='red', label= hteam,linewidth=2)  

plt.scatter(x= a_goal['minute'], y = a_goal['a_cum'] , marker = 'o')
plt.scatter(x= h_goal['minute'], y = h_goal['h_cum'] , marker = 'o',color = 'red')

plt.xticks([0,15,30,45,60,75,90])
plt.yticks([0, 0.5, 1, 1.5, 2, 2.5, 3])
plt.grid()

ax.title.set_text('The Expected Goals(xG) Chart Final Champions League 2010/2011')
plt.ylabel("Expected Goals (xG)")
plt.xlabel("Minutes")
ax.legend()
plt.show()

I don't have any clue to do it.

CodePudding user response:

I don't think matplotlib can draw custom markers. Therefore, I suggest the way to draw is to use the football image as a marker with the given coordinates.

import matplotlib.pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

def getImage(path):
   return OffsetImage(plt.imread(path), zoom=.02)
x_coords = [8.2, 4.5, 3.3, 6.9]
y_coords = [5.4, 3.5, 4.7, 7.1]
fig, ax = plt.subplots()
for x0, y0 in zip(x_coords, y_coords):
   ab = AnnotationBbox(getImage('football_icon.png'), (x0, y0), frameon=False)
   ax.add_artist(ab)
   
plt.xticks(range(10))
plt.yticks(range(10))
plt.show()

Output

enter image description here

CodePudding user response:

you can draw your own shapes by creating matplotlib Path objects. You need 2 lists to create it. 1)shape's vertices(coordinates) 2)codes:describes the path from a vertice to the next (MOVETO,LINETO,CURVE3,CURVE4,CLOSEPOLY,...)

for example

import matplotlib.pyplot as plt
from matplotlib.path import Path

vertices=[[ 1.86622681e 00, -9.69864442e 01], [-5.36324682e 01, -9.69864442e 01],
 [-9.86337733e 01, -5.19851396e 01], [-9.86337733e 01,  3.51356038e 00],
 [-9.86337733e 01,  5.90122504e 01], [-5.36324682e 01, 1.04013560e 02],
 [ 1.86622681e 00, 1.04013560e 02], [ 5.73649168e 01,  1.04013560e 02],
 [ 1.02366227e 02,  5.90122504e 01], [ 1.02366227e 02,  3.51356038e 00],
 [ 1.02366227e 02, -5.19851396e 01], [ 5.73649168e 01, -9.69864442e 01],
 [ 1.86622681e 00, -9.69864442e 01], [ 1.86622681e 00, -9.69864442e 01],
 [ 1.86622681e 00, -9.69864442e 01], [ 1.86622681e 00, -9.59864442e 01], 
 [ 1.49396568e 01, -9.59864442e 01], [ 2.74005268e 01, -9.34457032e 01],
 [ 3.88349768e 01, -8.88614442e 01], [ 3.93477668e 01, -8.39473616e 01],
 [ 3.91766768e 01, -7.84211406e 01], [ 3.83349768e 01, -7.24551946e 01],
 [ 2.54705168e 01, -7.17582316e 01], [ 1.38598668e 01, -6.91771276e 01],
 [ 3.49122681e 00, -6.47364446e 01], [-5.88483119e 00, -7.07454276e 01],
 [-1.85084882e 01, -7.43878696e 01], [-3.31337732e 01, -7.44239446e 01],
 [-3.31639232e 01, -8.07006846e 01], [-3.34889082e 01, -8.56747886e 01],
 [-3.41025232e 01, -8.92676942e 01], [-2.29485092e 01, -9.35925582e 01],
 [-1.08166852e 01, -9.59864442e 01], [ 1.86622681e 00, -9.59864442e 01],
 [ 1.86622681e 00, -9.59864442e 01], [ 1.86622681e 00, -9.59864442e 01],
 [ 3.98974768e 01, -8.84239444e 01], [ 6.30273268e 01, -7.88377716e 01],
 [ 8.17782368e 01, -6.07995616e 01], [ 9.22412268e 01, -3.81426946e 01],
 [ 8.94287268e 01, -3.42676946e 01], [ 8.27048568e 01, -3.89413496e 01],
 [ 7.41977468e 01, -4.19580876e 01], [ 6.55537268e 01, -4.39551946e 01],
 [ 6.55507268e 01, -4.39600946e 01], [ 6.55258268e 01, -4.39502946e 01],
 [ 6.55225268e 01, -4.39551946e 01], [ 5.64622368e 01, -5.74584576e 01],
 [ 4.77347768e 01, -6.68825886e 01], [ 3.93037768e 01, -7.22051946e 01],
 [ 4.01409768e 01, -7.80795846e 01], [ 4.03596968e 01, -8.35092576e 01],
 [ 3.98975268e 01, -8.84239444e 01], [ 3.98974768e 01, -8.84239444e 01],
 [ 3.98974768e 01, -8.84239444e 01], [-3.33525232e 01, -7.34239446e 01],
 [-3.33343532e 01, -7.34304446e 01], [-3.33081932e 01, -7.34174446e 01],
 [-3.32900232e 01, -7.34239446e 01], [-1.87512102e 01, -7.34136546e 01],
 [-6.26111319e 00, -6.98403626e 01], [ 2.95997681e 00, -6.39239446e 01],
 [ 4.88356681e 00, -5.29429786e 01], [ 6.50358681e 00, -4.13393356e 01],
 [ 7.80372681e 00, -2.91114446e 01], [-8.09469019e 00, -1.58596306e 01],
 [-1.93481942e 01, -5.40333762e 00], [-2.47587732e 01,  1.32605538e 00],
 [-3.69631432e 01, -2.50275662e 00], [-4.85465082e 01, -5.39578762e 00],
 [-5.95087732e 01, -7.36144462e 00], [-6.28171902e 01, -1.66250136e 01],
 [-6.52187002e 01, -2.98372096e 01], [-6.58837732e 01, -4.57989446e 01],
 [-5.53582062e 01, -6.01863506e 01], [-4.45266302e 01, -6.94131916e 01],
 [-3.33525232e 01, -7.34239446e 01], [-3.33525232e 01, -7.34239446e 01],
 [-3.33525232e 01, -7.34239446e 01], [-7.57587732e 01, -4.67676946e 01],
 [-7.29041812e 01, -4.67440446e 01], [-6.99334012e 01, -4.63526666e 01],
 [-6.68837732e 01, -4.56426946e 01], [-6.62087282e 01, -2.96768106e 01],
 [-6.37905682e 01, -1.64255576e 01], [-6.04462732e 01, -7.04894462e 00],
 [-6.81326882e 01,  3.32535038e 00], [-7.26804032e 01,  1.40097104e 01],
 [-7.40712732e 01,  2.50135604e 01], [-7.99916232e 01,  2.63222104e 01],
 [-8.66133452e 01,  2.67559804e 01], [-9.31650233e 01,  2.54510604e 01],
 [-9.31681733e 01,  2.54460604e 01], [-9.31931223e 01,  2.54560604e 01],
 [-9.31962733e 01,  2.54510604e 01], [-9.44043873e 01,  2.37123804e 01],
 [-9.54279373e 01,  2.17334704e 01], [-9.63212733e 01,  1.95448104e 01],
 [-9.71662733e 01,  1.43262704e 01], [-9.76337733e 01,  8.97093038e 00],
 [-9.76337733e 01,  3.51356038e 00], [-9.76337733e 01, -1.43647536e 01],
 [-9.29174773e 01, -3.11438126e 01], [-8.46650232e 01, -4.56426946e 01],
 [-8.18063532e 01, -4.64180796e 01], [-7.88476312e 01, -4.67932816e 01],
 [-7.57587732e 01, -4.67676946e 01], [-7.57587732e 01, -4.67676946e 01],
 [-7.57587732e 01, -4.67676946e 01], [ 6.55224768e 01, -4.28926946e 01],
 [ 7.40107668e 01, -4.09146326e 01], [ 8.23640768e 01, -3.79999686e 01],
 [ 8.88662268e 01, -3.34864446e 01], [ 9.61553068e 01, -1.55950616e 01],
 [ 9.94808868e 01, -1.66158462e 00], [ 9.88662268e 01,  8.32606038e 00],
 [ 9.42289868e 01,  2.15752904e 01], [ 8.77410868e 01,  3.15965604e 01],
 [ 8.11474768e 01,  3.82010604e 01], [ 7.17659368e 01,  3.38334104e 01],
 [ 6.38899668e 01,  3.03415204e 01], [ 5.74912268e 01,  2.77635604e 01],
 [ 5.68036568e 01,  1.50717604e 01], [ 5.35581368e 01, -9.16606169e-02],
 [ 4.82412268e 01, -1.60489446e 01], [ 5.52234668e 01, -2.62259056e 01],
 [ 6.09897268e 01, -3.51652306e 01], [ 6.55224768e 01, -4.28926946e 01],
 [ 6.55224768e 01, -4.28926946e 01], [ 6.55224768e 01, -4.28926946e 01],
 [ 8.42872681e 00, -2.83614446e 01], [ 2.13772368e 01, -2.57261866e 01],
 [ 3.43239568e 01, -2.15154036e 01], [ 4.72724768e 01, -1.57364446e 01],
 [ 5.25849968e 01,  2.07647383e-01], [ 5.58247068e 01,  1.53619304e 01],
 [ 5.64912268e 01,  2.79510604e 01], [ 5.64917568e 01,  2.79612604e 01],
 [ 5.64906868e 01,  2.79721604e 01], [ 5.64912268e 01,  2.79822604e 01],
 [ 4.74302668e 01,  3.88992704e 01], [ 3.74260968e 01,  4.79380604e 01],
 [ 2.64912268e 01,  5.51072604e 01], [ 1.05529568e 01,  5.24508804e 01],
 [-4.02431919e 00,  4.78459804e 01], [-1.52900232e 01,  4.18885104e 01],
 [-1.91554652e 01,  2.63828404e 01], [-2.20678242e 01,  1.30703504e 01],
 [-2.40400232e 01,  1.98226038e 00], [-1.87588732e 01, -4.60782062e 00],
 [-7.49875919e 00, -1.50853886e 01], [ 8.42872681e 00, -2.83614946e 01],
 [ 8.42872681e 00, -2.83614446e 01], [ 8.42872681e 00, -2.83614446e 01],
 [ 9.97724768e 01,  8.82606038e 00], [ 1.01209977e 02,  9.29481038e 00],
 [ 9.97891268e 01,  3.41125404e 01], [ 8.92576668e 01,  5.64775904e 01],
 [ 7.29287268e 01,  7.31385604e 01], [ 7.01162268e 01,  7.01073104e 01],
 [ 7.65398468e 01,  5.90945204e 01], [ 8.04306168e 01,  4.87012104e 01],
 [ 8.18037268e 01,  3.89510604e 01], [ 8.85060268e 01,  3.22487504e 01],
 [ 9.50869868e 01,  2.21436404e 01], [ 9.97724768e 01,  8.82606038e 00],
 [ 9.97724768e 01,  8.82606038e 00], [ 9.97724768e 01,  8.82606038e 00],
 [-7.39150232e 01,  2.60448104e 01], [-6.92374072e 01,  3.77382804e 01],
 [-6.07391432e 01,  4.81501604e 01], [-4.84150232e 01,  5.72948104e 01],
 [-4.77543102e 01,  6.78197404e 01], [-4.56607662e 01,  7.76814004e 01],
 [-4.11025232e 01,  8.57010604e 01], [-4.52341512e 01,  8.65620704e 01],
 [-4.97579362e 01,  8.64646604e 01], [-5.46650232e 01,  8.53885604e 01],
 [-7.24317802e 01,  7.30970204e 01], [-8.60276902e 01,  5.51787904e 01],
 [-9.28212733e 01,  3.42010604e 01], [-9.28243733e 01,  3.41920604e 01],
 [-9.28181733e 01,  3.41792604e 01], [-9.28212733e 01,  3.41698604e 01],
 [-9.30130013e 01,  3.14875704e 01], [-9.31144113e 01,  2.89274504e 01],
 [-9.31337733e 01,  2.64511104e 01], [-8.65119202e 01,  2.77331304e 01],
 [-7.98647022e 01,  2.73522904e 01], [-7.39150232e 01,  2.60448604e 01],
 [-7.39150232e 01,  2.60448104e 01], [-7.39150232e 01,  2.60448104e 01],
 [-1.56650232e 01,  4.27948104e 01], [-4.35766519e 00,  4.87636404e 01],
 [ 1.01466668e 01,  5.33700304e 01], [ 2.60224768e 01,  5.60448104e 01],
 [ 2.85590568e 01,  6.43435004e 01], [ 3.07827468e 01,  7.29492504e 01],
 [ 3.27099768e 01,  8.18573104e 01], [ 2.55039768e 01,  9.03537704e 01],
 [ 1.39714968e 01,  9.64983204e 01], [-1.13376819e 00,  9.85135604e 01],
 [-1.57753392e 01,  9.71825004e 01], [-2.87516412e 01,  9.28553404e 01],
 [-4.00712732e 01,  8.55448104e 01], [-4.46513912e 01,  7.76614604e 01],
 [-4.67507882e 01,  6.78133804e 01], [-4.74150232e 01,  5.72323104e 01],
 [-3.59060892e 01,  5.27285604e 01], [-2.53218622e 01,  4.79159104e 01],
 [-1.56650232e 01,  4.27948104e 01], [-1.56650232e 01,  4.27948104e 01],
 [ 6.94599768e 01,  7.08573104e 01], [ 7.22412268e 01,  7.38573104e 01],
 [ 5.42332468e 01,  9.18657304e 01], [ 2.93485768e 01,  1.03013560e 02],
 [ 1.86622681e 00,  1.03013560e 02], [ 1.03891181e 00,  1.03013560e 02],
 [ 2.19951808e-01,  1.03002360e 02], [-6.02518192e-01,  1.02982360e 02],
 [-1.00876819e 00,  9.94823604e 01], [ 1.43154268e 01,  9.74387404e 01],
 [ 2.60994568e 01,  9.12180804e 01], [ 3.34912268e 01,  8.24823604e 01],
 [ 4.89375568e 01,  8.17496704e 01], [ 6.09313968e 01,  7.78789204e 01],
 [ 6.94599768e 01,  7.08573604e 01], [ 6.94599768e 01,  7.08573104e 01],
 [ 6.94599768e 01,  7.08573104e 01]]
codes=[1,4,4,4,4,4,4,4,4,4,4,4,4,2,79,
1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79,
1,4,4,4,2,4,4,4,4,4,4,4,4,4,4,4,4,2,79,
1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79,
1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79,
1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79,
1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79,
1,2,4,4,4,2,4,4,4,4,4,4,2,79,
1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79,
1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,79,
1,2,4,4,4,4,4,4,2,4,4,4,4,4,4,2, 79]
print(Path.MOVETO,Path.LINETO,Path.CURVE3,Path.CURVE4,Path.CLOSEPOLY)
ball=Path(vertices,codes)
fig, ax = plt.subplots(figsize=(12,6))
plt.plot(15,1,color='b',marker=ball,markersize=30)
plt.xticks([0,15,30,45,60,75,90])
plt.yticks([0, 0.5, 1, 1.5, 2, 2.5, 3])
plt.grid()
ax.title.set_text('The Expected Goals(xG) Chart Final Champions League 2010/2011')
plt.ylabel("Expected Goals (xG)")
plt.xlabel("Minutes")
ax.legend()
plt.show()

output enter image description here

  • Related