Python: Come personalizzare e utilizzare efficacemente la barra dei colori con Matplotlib

Matplotlib è una libreria ampiamente utilizzata in Python per la visualizzazione dei dati. La barra dei colori è un elemento fondamentale per rappresentare le informazioni numeriche sui grafici attraverso i colori. Tuttavia, la barra dei colori predefinita non sempre mostra i dati in modo chiaro e intuitivo. Personalizzando correttamente la barra dei colori, è possibile migliorare l’efficacia visiva e comunicare chiaramente l’intento del grafico. In questo articolo, esploreremo l’uso di base della barra dei colori e le sue applicazioni avanzate, per imparare a realizzare visualizzazioni dei dati efficaci.

Indice

Uso di base della barra dei colori


La barra dei colori è uno strumento che mostra la corrispondenza tra i colori e i valori dei dati in un grafico creato con Matplotlib. È particolarmente utile per visualizzare la distribuzione dei dati, come nelle mappe di calore o nei grafici a dispersione, per comprendere visivamente l’intervallo o la distribuzione dei dati. Ecco i passaggi di base per aggiungere una barra dei colori.

Aggiungere una barra dei colori


In Matplotlib, è possibile aggiungere una barra dei colori utilizzando plt.colorbar(). Ecco un esempio semplice di come aggiungere una barra dei colori a una mappa di calore.

import matplotlib.pyplot as plt
import numpy as np

# Creazione dei dati di esempio
data = np.random.rand(10, 10)

# Disegnare la mappa di calore
plt.imshow(data, cmap='viridis')

# Aggiungere la barra dei colori
plt.colorbar()

# Visualizzare il grafico
plt.show()

Eseguendo questo codice, vedrai la barra dei colori sul lato destro della mappa di calore, che ti permette di visualizzare come i colori rappresentano i valori dei dati.

Ruolo di base della barra dei colori


La barra dei colori aiuta a comprendere i dati in due modi principali:

  • Visualizzazione dell’intervallo dei dati: la barra dei colori mostra visivamente l’intervallo dai valori minimi ai massimi dei dati.
  • Corrispondenza tra valori e colori: i valori dei dati corrispondono a colori specifici, consentendo di comprendere rapidamente i valori guardando solo il colore.

La barra dei colori predefinita è semplice, ma può essere personalizzata per migliorarne l’efficacia nella trasmissione dei dati, regolando l’aspetto o la scala quando necessario.

Come personalizzare la mappa dei colori e la scala dei dati


Per massimizzare l’effetto visivo della barra dei colori, è importante scegliere la mappa dei colori e la scala più adatti alla natura dei dati. Matplotlib offre diverse opzioni di mappe dei colori e impostazioni di scala che possono essere sfruttate per enfatizzare efficacemente le caratteristiche dei dati.

Selezione della mappa dei colori


Una mappa dei colori è uno schema di colori utilizzato per convertire i dati numerici in colori. Matplotlib offre numerose mappe dei colori tra cui scegliere. A seconda dell’uso, si possono scegliere mappe dei colori come:

  • Dati continui: viridis o plasma (dove la luminosità e la saturazione cambiano in modo continuo)
  • Dati con segno opposto (dati che comprendono valori positivi e negativi): seismic o coolwarm
  • Dati categorici: tab10 o Set3

Ecco un esempio che mostra come cambiare la mappa dei colori:

import matplotlib.pyplot as plt
import numpy as np

# Creazione dei dati di esempio
data = np.random.rand(10, 10)

# Disegnare la mappa di calore (cambiando la mappa dei colori in plasma)
plt.imshow(data, cmap='plasma')

# Aggiungere la barra dei colori
plt.colorbar()

# Visualizzare il grafico
plt.show()

Personalizzazione della scala dei dati


La barra dei colori deve essere regolata correttamente in base alla scala dei dati. La scala può essere impostata come segue:

  • Limitare l’intervallo: specificare vmin e vmax per chiarire l’intervallo dei dati.
  • Enfatizzare un intervallo specifico: escludere i valori estremi e concentrarsi sull’intervallo di interesse.

Ecco un esempio in cui vengono specificati vmin e vmax:

# Disegnare la mappa di calore (impostando l'intervallo)
plt.imshow(data, cmap='viridis', vmin=0.2, vmax=0.8)

# Aggiungere la barra dei colori
plt.colorbar()

plt.show()

Selezione della mappa dei colori e della scala in base ai dati

  • Se l’intervallo dei dati è ristretto: utilizzare una mappa dei colori brillante per un effetto visivo maggiore.
  • Dati scientifici: rispettare le convenzioni per la selezione della mappa dei colori.

Selezionando correttamente la mappa dei colori e la scala, è possibile migliorare notevolmente la comprensione visiva dell’intero grafico.

Personalizzazione dell’aspetto della barra dei colori


Regolando l’aspetto della barra dei colori, è possibile facilitare l’interpretazione dei dati e rendere il grafico più raffinato. In Matplotlib, è possibile personalizzare il titolo, le etichette, la posizione e la dimensione del font della barra dei colori.

Aggiungere un titolo alla barra dei colori


Per aggiungere un titolo alla barra dei colori e chiarire cosa rappresentano i colori, si utilizza colorbar.set_label().

import matplotlib.pyplot as plt
import numpy as np

# Creazione dei dati di esempio
data = np.random.rand(10, 10)

# Disegnare la mappa di calore
plt.imshow(data, cmap='viridis')

# Aggiungere la barra dei colori
cbar = plt.colorbar()
cbar.set_label('Valore dei dati', fontsize=12)

plt.show()

Modificare la dimensione e lo stile del font delle etichette


È possibile personalizzare le etichette delle tacche (tick) della barra dei colori modificando la dimensione e lo stile del font. Nell’esempio seguente vengono cambiati la dimensione e il colore del font:

cbar.ax.tick_params(labelsize=10, labelcolor='blue')

Regolare la posizione della barra dei colori


Per default, la barra dei colori è posizionata sul lato destro del grafico, ma è possibile modificarne la posizione e la dimensione utilizzando i parametri shrink e aspect.

plt.colorbar(shrink=0.8, aspect=20)
  • shrink: Ridurre la lunghezza della barra dei colori (specificare un valore tra 0 e 1).
  • aspect: Regolare il rapporto di aspetto della barra dei colori.

Impostare esplicitamente l’intervallo e le tacche della barra dei colori


Per migliorare la comprensione dei dati, è possibile impostare manualmente le tacche della barra dei colori utilizzando colorbar.set_ticks().

import matplotlib.ticker as ticker

cbar.set_ticks([0.2, 0.5, 0.8])
cbar.set_ticklabels(['Basso', 'Medio', 'Alto'])

Applicare un design complesso


Per personalizzazioni avanzate, è possibile accedere direttamente all’area di disegno della barra dei colori.

cbar.ax.set_title('Legenda dei colori', fontsize=10, loc='left')

Selezionare un aspetto appropriato

  • Selezionare il design in base al tema del grafico e alla prospettiva dell’utente.
  • Per articoli scientifici, scegliere un design semplice e leggibile; per presentazioni, optare per un design più accattivante.

Raffinare il design della barra dei colori migliorerà notevolmente l’efficacia della visualizzazione dei dati.

Creare una barra dei colori discreta


La barra dei colori discreta viene utilizzata quando i dati non sono continui, ma appartengono a categorie o classi separate. È utile per mostrare chiaramente i dati categorici e gioca un ruolo importante nelle analisi dei dati o nelle presentazioni.

Necessità della barra dei colori discreta

  • Visualizzazione di dati categorici: utilizzata per dati geografici, risultati di classificazione o dati suddivisi in intervalli specifici.
  • Differenziazione chiara dei colori: consente di distinguere facilmente le diverse categorie visivamente.

Come creare una barra dei colori discreta


È possibile discretizzare la mappa dei colori utilizzando BoundaryNorm di Matplotlib.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import BoundaryNorm
from matplotlib.cm import get_cmap

# Creazione dei dati di esempio
data = np.random.rand(10, 10) * 100

# Impostazione della barra dei colori
bounds = [0, 20, 40, 60, 80, 100]  # Valori di separazione
cmap = get_cmap('viridis', len(bounds) - 1)  # Mappa dei colori per il numero di categorie
norm = BoundaryNorm(bounds, cmap.N)

# Disegnare la mappa di calore
plt.imshow(data, cmap=cmap, norm=norm)

# Aggiungere la barra dei colori
cbar = plt.colorbar(ticks=bounds)  # Usare i valori di separazione come tacche
cbar.set_label('Categoria')

plt.show()

Questo codice mappa i valori dei dati agli intervalli specificati (0–20, 20–40, ecc.), visualizzandoli con colori diversi.

Personalizzare le etichette della barra dei colori


Per ogni categoria, è possibile impostare etichette specifiche per chiarire cosa rappresentano i colori.

cbar.set_ticklabels(['Molto Basso', 'Basso', 'Medio', 'Alto', 'Molto Alto'])

Mappa dei colori personalizzata per categorie


Per specificare un insieme di colori personalizzati, si può usare ListedColormap per creare una mappa dei colori manualmente.

from matplotlib.colors import ListedColormap

colors = ['blue', 'green', 'yellow', 'orange', 'red']
cmap = ListedColormap(colors)
norm = BoundaryNorm(bounds, len(colors))

plt.imshow(data, cmap=cmap, norm=norm)
plt.colorbar(ticks=bounds)
plt.show()

Scenari di utilizzo della barra dei colori discreta

  • Classificazione delle aree su una mappa (esempio: densità di popolazione, zone climatiche).
  • Visualizzazione dei risultati di classificazione dei modelli di machine learning (esempio: etichette di classe).
  • Colorare i risultati di scoring per mostrare intuitivamente le gamme.

La barra dei colori discreta è uno strumento potente per organizzare visivamente i dati categoriali e migliorare la persuasività durante le presentazioni o le analisi.

Creare una barra dei colori su scala logaritmica


Quando i dati sono distribuiti su un ampio intervallo, l’uso di una barra dei colori su scala logaritmica consente di visualizzare facilmente i valori estremi e quelli molto piccoli. Questo è particolarmente utile per i dati scientifici o finanziari, dove i numeri cambiano in modo esponenziale.

Necessità della scala logaritmica

  • Gestire un ampio intervallo di dati: quando c’è una grande differenza tra il valore minimo e massimo dei dati.
  • Bilanciare i dettagli e la panoramica: per visualizzare accuratamente sia i valori piccoli che quelli grandi.
  • Rappresentazione standard per i dati scientifici: la scala logaritmica è comune per alcuni tipi di dati (esempio: magnitudo dei terremoti, osservazioni astronomiche).

Creare una barra dei colori su scala logaritmica


In Matplotlib, è possibile applicare una scala logaritmica utilizzando LogNorm.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm

# Creazione dei dati di esempio
data = np.random.rand(10, 10) * 1000
data[0, 0] = 0.01  # Aggiungere un valore molto basso per testare l'effetto della scala

# Disegnare la mappa di calore (applicando la scala logaritmica)
plt.imshow(data, cmap='viridis', norm=LogNorm(vmin=0.01, vmax=1000))

# Aggiungere la barra dei colori
cbar = plt.colorbar()
cbar.set_label('Valori su scala logaritmica')

plt.show()

Questo codice genera una barra dei colori basata sulla scala logaritmica, visualizzando correttamente l’intervallo da 0.01 a 1000.

Regolazione della scala logaritmica per valori piccoli


Quando i dati contengono valori zero o negativi, l’uso di una scala logaritmica causerà un errore. Ecco alcune soluzioni:

  1. Impostare un valore minimo: sostituire i valori zero con un valore positivo molto piccolo.
   data[data <= 0] = 0.01
  1. Personalizzare la mappa dei colori: creare una scala logaritmica personalizzata per i valori negativi.

Regolazione delle tacche della barra dei colori


Per rendere più comprensibile la scala logaritmica, è possibile regolare manualmente la disposizione delle tacche.

from matplotlib.ticker import LogLocator

cbar = plt.colorbar()
cbar.set_ticks(LogLocator(base=10.0, subs=None, numticks=10))
cbar.set_label('Valori su scala logaritmica (tacche personalizzate)')

Esempi applicativi: utilizzo della scala logaritmica

  • Mappe di calore: per enfatizzare piccole variazioni in dati scientifici (ad esempio, intensità radiativa, distribuzione della luminosità).
  • Grafici a dispersione: per visualizzare variazioni di grande valore e valore ridotto nei dati finanziari (ad esempio, fluttuazioni del prezzo delle azioni).
  • Mappe geografiche: per visualizzare la distribuzione di terremoti o la densità della popolazione.

Considerazioni

  • Quando i dati contengono valori zero o negativi, la scala logaritmica non è applicabile, quindi è necessario un preprocessing dei dati.
  • Assicurarsi che l’uso della scala logaritmica sia adatto alla visualizzazione dei dati.

Utilizzando efficacemente una barra dei colori logaritmica, è possibile trasmettere meglio le caratteristiche dei dati e migliorare la precisione della visualizzazione.

Condividere una barra dei colori tra più grafici


Quando si creano più grafici, l’aggiunta di barre dei colori separate per ogni grafico può creare un effetto visivo confusionario. Se tutti i grafici condividono lo stesso intervallo di dati, è possibile condividere una sola barra dei colori per mantenere l’uniformità e ottimizzare lo spazio.

Quando è utile condividere la barra dei colori

  • Grafici di confronto: quando si confrontano diverse serie di dati o condizioni.
  • Grafici con intervallo dati coerente: quando tutti i grafici utilizzano lo stesso intervallo di valori per la mappa dei colori.
  • Ottimizzazione dello spazio: eliminando barre dei colori separate, è possibile semplificare il layout del grafico.

Come condividere una barra dei colori


In Matplotlib, è possibile condividere una barra dei colori utilizzando fig.colorbar(). Ecco un esempio:

import matplotlib.pyplot as plt
import numpy as np

# Creazione dei dati di esempio
data1 = np.random.rand(10, 10) * 100
data2 = np.random.rand(10, 10) * 100

# Creare la figura e gli assi
fig, axs = plt.subplots(1, 2, figsize=(10, 5))

# Disegnare le mappe di calore
im1 = axs[0].imshow(data1, cmap='viridis', vmin=0, vmax=100)
im2 = axs[1].imshow(data2, cmap='viridis', vmin=0, vmax=100)

# Condividere la barra dei colori
cbar = fig.colorbar(im1, ax=axs, orientation='vertical')
cbar.set_label('Barra dei colori condivisa')

plt.show()

In questo esempio, entrambi i grafici condividono la stessa scala definita tramite vmin e vmax, e la barra dei colori è associata a entrambi i grafici.

Regolare la posizione e l’orientamento della barra dei colori


È possibile regolare l’orientamento e la posizione della barra dei colori per ottimizzare il layout di più grafici. Ad esempio, per posizionare la barra dei colori orizzontale in basso:

cbar = fig.colorbar(im1, ax=axs, orientation='horizontal', fraction=0.046, pad=0.1)
  • orientation: Specificare se 'horizontal' o 'vertical' per determinare l’orientamento.
  • fraction: Regolare la larghezza della barra dei colori.
  • pad: Regolare la distanza tra il grafico e la barra dei colori.

Regolare la posizione della barra dei colori nei grafici multipli


Quando si condividono le barre dei colori tra più grafici, si può specificare la posizione utilizzando fig.colorbar():

fig, axs = plt.subplots(1, 2, figsize=(10, 5))
im1 = axs[0].imshow(data, cmap='viridis')
im2 = axs[1].imshow(data, cmap='viridis')

# Posizionare la barra dei colori sul lato destro di entrambi i grafici
cbar = fig.colorbar(im1, ax=axs, orientation='vertical', fraction=0.05, pad=0.04)
cbar.set_label('Intervallo dei dati')

plt.show()

Esempi applicativi

  • Mappe di calore: Quando ci sono molte etichette, posizionare la barra dei colori in basso per risparmiare spazio.
  • Dati geografici: Posizionare la barra dei colori all’esterno per visualizzare l’intera mappa.
  • Dati scientifici: Per figure lunghe, posizionare la barra dei colori orizzontale in basso.

Le migliori pratiche per la posizione della barra dei colori

  • Considerare la visibilità del grafico quando si sceglie la posizione della barra dei colori.
  • Regolare le etichette e le unità affinché siano chiaramente visibili sulla barra dei colori.
  • Posizionare la barra dei colori in modo che i dati e la loro rappresentazione siano facilmente comprensibili.

Posizionare correttamente la barra dei colori migliorerà l’impatto visivo del grafico e la chiarezza dei dati trasmessi.

Conclusione


In questo articolo, abbiamo esplorato come personalizzare la barra dei colori in Python utilizzando Matplotlib. Partendo dalle basi dell’uso della barra dei colori, abbiamo trattato la selezione delle mappe dei colori, la regolazione della scala e dell’aspetto, e la creazione di barre dei colori discrete o logaritmiche. Inoltre, abbiamo analizzato tecniche pratiche per condividere una barra dei colori tra più grafici e regolare la sua posizione.

La barra dei colori non è solo un elemento aggiuntivo nella visualizzazione dei dati, ma svolge un ruolo cruciale nel comunicare visivamente le caratteristiche dei dati. Con una personalizzazione adeguata, è possibile creare grafici più chiari e convincenti.

Indice