Come creare un grafico a linea di calore

Come realizzare un grafico a linea di calore

Creazione di un grafico a linee segmentato multidimensionale

Probabilmente hai sentito parlare di una mappa di calore. Quei griglie colorate bidimensionali che possono essere utilizzate per rappresentare diverse (di solito 3) dimensioni dei dati; ad esempio, la mappa di calore qui sotto mostra la temperatura media nelle Southern Rockies in base al mese e all’anno.

Una mappa di calore che mostra la temperatura media nelle Southern Rockies dal 1950 al 2020.. [CC BY-SA 4.0]

Ho pensato alle mappe di calore quando ho avuto la necessità di visualizzare alcuni dati di Strava. Volevo confrontare alcune recenti maratone che ho fatto guardando il mio ritmo e la frequenza cardiaca (zone) lungo i 42,2 km di ciascuna gara. Questo mi ha suggerito di utilizzare un grafico a linee, utilizzando ogni intervallo di 1 km come valore di x e il mio ritmo durante questi intervalli come valore di y. Ma cosa dire della frequenza cardiaca (come misura dello sforzo) durante questi intervalli? Il grafico a linee standard di Matplotlib (la mia libreria di grafici preferita) non fornisce un modo diretto per codificare dimensioni aggiuntive come queste, perché le proprietà come il colore, lo spessore e lo stile della linea sono fissate e applicate all’intero grafico. Nel mio caso, volevo poter variare le proprietà dei singoli segmenti di linea in modo da poter, ad esempio, utilizzare il colore per mostrare le zone della mia frequenza cardiaca durante diverse parti della gara.

Questo è abbastanza semplice da fare ed è un esempio utile di quando e perché guardare oltre le funzionalità predefinite di Matplotlib. L’idea di base è di tracciare separatamente ciascuno dei segmenti di linea che compongono il grafico a linee. In questo modo possiamo controllare individualmente le proprietà visive di ciascun segmento in modo da poter utilizzare, ad esempio, il colore del segmento di linea per rappresentare qualcosa come la frequenza cardiaca in questo caso.

Possiamo fare ciò utilizzando la classe LineCollection di Matplotlib, come un modo conveniente per tracciare più linee (o segmenti di linea) con colori e larghezze separate. Per fare ciò, dobbiamo convertire la nostra lista di punti (x, y) in una lista di coordinate di inizio e fine per ciascuno dei segmenti di linea. Ad esempio, dati i seguenti punti (x, y)…

(x0, y0), (x1, y1), …, (xn, yn)

…dobbiamo produrre una lista di segmenti di linea come segue:

[ [(x0, y0), (x1, y1)], [(x1, y1), (x2, y2)], …, [(xn-1, yn-1), (xn, yn)] ]

Questo è lo scopo delle righe 12-16 nel codice qui sotto; anche se quanto sopra è una rappresentazione semplificata per scopi di spiegazione.