Aggiunta del Secondo Pilota


Per poter aggiungere un secondo pilota la prima cosa da fare è quella di decidere di quale pilota si tratta ed assegnarlo ad una variabile.
Utilizzeremo poi questa variabile per scaricare i dati telemetrici che lo riguardano ed avere, quindi, i dati necessari da utilizzare nei grafici.

Andiamo quindi nel blocco di codice dove avevamo indicato il primo pilota da analizzare.

Il blocco, al momento, è fatto così.

driver_1 = 'HAM'
color_1 = '#CC0000'
label_1 = f"{driver_1} - {session1.name}"

Quello che faremo sarà duplicare quelle linee di codice inserendo le informazioni del secondo pilota e cambiando il nome delle variabili utilizzando 2 al posto di 1.

Aggiungiamo anche, come al solito, qualche commento per praticità ed alla fine quel blocco avrà adesso questo aspetto.

# Informazioni primo pilota
driver_1 = 'HAM'
color_1 = '#CC0000'
label_1 = f"{driver_1} - {session1.name}"

# Informazioni secondo pilota
driver_2 = 'VER'
color_2 = '#0000CC'
label_2 = f"{driver_2} - {session1.name}"

Non dimentichiamoci di eseguirlo così da applicare le modifiche.

Subito sotto, abbiamo poi i 3 blocchi dove abbiamo caricato i dati telemetrici del primo pilota; anche questi vanno sdoppiati mettendo per ciascuno anche il riferimento del secondo pilota.
Io per comodità ho condensato i 3 blocchi in uno unico ma potete anche sdoppiarli uno per uno, come preferite.

# Riferimenti telemetrici primo pilota
laps_driver_1 = session1.laps.pick_driver(driver_1)
fastest_driver_1 = laps_driver_1.pick_fastest()
telemetry_driver_1 = fastest_driver_1.get_telemetry().add_distance()

# Riferimenti telemetrici secondo pilota
laps_driver_2 = session1.laps.pick_driver(driver_2)
fastest_driver_2 = laps_driver_2.pick_fastest()
telemetry_driver_2 = fastest_driver_2.get_telemetry().add_distance()

Notare che il riferimento session1 resta uguale dal momento che, in questa fase, abbiamo un’unica sessione (Qualifica del Gran Premio di Spagna 2023) e la utilizziamo per entrambi i piloti.

Nuovamente, eseguiamo queste linee di codice.

Adesso spostiamoci nella sezione di codice relativa al grafico ed individuiamo, nella parte della velocità, la linea con i dati relativi al primo pilota.

ax[0].plot(telemetry_driver_1['Distance'], telemetry_driver_1['Speed'], label=label_1, color=color_1)

Sdoppiamola, copiandola ed incollandola subito dopo. Avremo quindi due linee identiche ed andremo a modificare la seconda in questo modo.

ax[0].plot(telemetry_driver_2['Distance'], telemetry_driver_2['Speed'], label=label_2, color=color_2)

In pratica indichiamo che i valori relativi all’asse orizzontale e verticale per la nuova linea saranno relativi ai dati del secondo pilota; allo stesso modo indichiamo che il colore e l’etichetta (che utilizzeremo poi nella legenda) si riferiscono al secondo pilota.

La sezione relativa al grafico della velocità sarà quindi così.

# Grafico della velocità
ax[0].plot(telemetry_driver_1['Distance'], telemetry_driver_1['Speed'], label=label_1, color=color_1)
ax[0].plot(telemetry_driver_2['Distance'], telemetry_driver_2['Speed'], label=label_2, color=color_2)
ax[0].set_facecolor(subplot_bgcolor)
ax[0].grid(which='major', color='#CCCCCC', linewidth=0.8)
ax[0].grid(which='minor', color='#DDDDDD', linestyle=':', linewidth=0.5)
ax[0].minorticks_on()
ax[0].title.set_text('Speed')
ax[0].set(xlabel=f"Distance (meters)")
ax[0].set(ylabel=f"Speed (km/h)")
# ------------------------

Al solito, eseguiamo il codice.

E verifichiamo il risultato.

Il grafico della velocità è a posto. Mancano i dati relativi all’acceleratore del secondo pilota e la legenda indica solo il primo pilota.
Proseguiamo quindi aggiungendo come prima cosa i dati relativi all’acceleratore del secondo pilota.

Similmente a come abbiamo fatto prima, identifichiamo la linea di codice relativa ai dati di acceleratore del primo pilota, questa.

ax[1].plot(telemetry_driver_1['Distance'], telemetry_driver_1['Throttle'], label=label_1, color=color_1)

La sdoppiamo e modifichiamo la seconda mettendo i riferimenti al secondo pilota (sia per i valori che per l’etichetta che per il colore).

ax[1].plot(telemetry_driver_2['Distance'], telemetry_driver_2['Throttle'], label=label_2, color=color_2)

La sezione di codice relativa all’acceleratore sarà quindi così.

# Grafico dell'acceleratore
ax[1].plot(telemetry_driver_1['Distance'], telemetry_driver_1['Throttle'], label=label_1, color=color_1)
ax[1].plot(telemetry_driver_2['Distance'], telemetry_driver_2['Throttle'], label=label_2, color=color_2)
ax[1].legend(loc='lower center', bbox_to_anchor=(0.5, -0.4),)
ax[1].set_facecolor(subplot_bgcolor)
ax[1].grid(which='major', color='#CCCCCC', linewidth=0.8)
ax[1].grid(which='minor', color='#DDDDDD', linestyle=':', linewidth=0.5)
ax[1].minorticks_on()
ax[1].title.set_text('Throttle')
ax[1].set(xlabel=f"Distance (meters)")
ax[1].set(ylabel=f"Throttle (%)")
# ------------------------

Eseguiamo il codice.

Ed avremo questo risultato.

Oltre ad avere il grafico sull’utilizzo dell’acceleratore del secondo pilota, abbiamo anche la legenda aggiornata; questo perché nel secondo grafico (ax[1]) avevamo già indicato di mostrare la legenda ed avendo impostato una ulteriore serie di dati, con relativa etichetta, questa viene mostrata.

Come di consueto, modificando qualcosa che ha a che fare con le dimensioni dei componenti (in questo caso la legenda che da una diventa di due righe) dovremmo sistemare il posizionamento della legenda stessa.

Vogliamo però che le informazioni della legenda non siano una sotto l’altra ma affiancate.

Individuiamo quindi la linea di codice relativa alla legenda (nella sezione del grafico dell’acceleratore) e la modifichiamo in questo modo.

ax[1].legend(loc='lower center', bbox_to_anchor=(0.5, -0.4), ncol=2)

Con ncol=2 impostiamo che la legenda sarà visualizzata su due colonne.

Dobbiamo anche modificare la linea del titolo dal momento che non devo più riportare il nome del singolo pilota; io ho deciso di rimuovere sia il riferimento al pilota che a quello della sessione, dal momento che queste informazioni vengono indicate nella legenda.
Lascio giusto l’anno ed il nome (Gran Premio).

La linea del titolo modificata sarà quindi così.

plot_title = f"{session1.event.year} {session1.event.EventName}"

A questo punto l’ultimo blocco di codice sarà fatto così.

# Parametri generali del grafico
plot_size = [20, 10]
plt.rcParams['figure.figsize'] = plot_size
plot_title = f"{session1.event.year} {session1.event.EventName}"
fig, ax = plt.subplots(2, height_ratios=[2, 1])
subplot_bgcolor = '#FAFAFA'
plt.suptitle(plot_title)
# ------------------------

# Grafico della velocità
ax[0].plot(telemetry_driver_1['Distance'], telemetry_driver_1['Speed'], label=label_1, color=color_1)
ax[0].plot(telemetry_driver_2['Distance'], telemetry_driver_2['Speed'], label=label_2, color=color_2)
ax[0].set_facecolor(subplot_bgcolor)
ax[0].grid(which='major', color='#CCCCCC', linewidth=0.8)
ax[0].grid(which='minor', color='#DDDDDD', linestyle=':', linewidth=0.5)
ax[0].minorticks_on()
ax[0].title.set_text('Speed')
ax[0].set(xlabel=f"Distance (meters)")
ax[0].set(ylabel=f"Speed (km/h)")
# ------------------------

# Grafico dell'acceleratore
ax[1].plot(telemetry_driver_1['Distance'], telemetry_driver_1['Throttle'], label=label_1, color=color_1)
ax[1].plot(telemetry_driver_2['Distance'], telemetry_driver_2['Throttle'], label=label_2, color=color_2)
ax[1].legend(loc='lower center', bbox_to_anchor=(0.5, -0.4), ncol=2)
ax[1].set_facecolor(subplot_bgcolor)
ax[1].grid(which='major', color='#CCCCCC', linewidth=0.8)
ax[1].grid(which='minor', color='#DDDDDD', linestyle=':', linewidth=0.5)
ax[1].minorticks_on()
ax[1].title.set_text('Throttle')
ax[1].set(xlabel=f"Distance (meters)")
ax[1].set(ylabel=f"Throttle (%)")
# ------------------------

plt.show()

Lo eseguiamo.

E questo sarà il risultato finale.

Che ne dite? Non male come primo tentativo, non credete?

Nella prossima pagina riporto tutti i blocchi di codice necessari per avere questo risultato così potete avere una visualizzazione completa e confrontarli coi vostri in caso di modifiche e/o errori.