Dispersione Matplotlib
Creazione di grafici a dispersione
Con Pyplot, puoi usare la scatter()
funzione per disegnare un grafico a dispersione.
La scatter()
funzione traccia un punto per ogni osservazione. Ha bisogno di due array della stessa lunghezza, uno per i valori dell'asse x e uno per i valori sull'asse y:
Esempio
Un semplice grafico a dispersione:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y)
plt.show()
Risultato:
L'osservazione nell'esempio sopra è il risultato del passaggio di 13 auto.
L'asse X mostra quanti anni ha l'auto.
L'asse Y mostra la velocità dell'auto quando passa.
Ci sono relazioni tra le osservazioni?
Sembra che più l'auto sia nuova, più vada veloce, ma potrebbe essere una coincidenza, dopotutto abbiamo registrato solo 13 auto.
Confronta le trame
Nell'esempio sopra, sembra esserci una relazione tra velocità ed età, ma cosa succede se tracciamo anche le osservazioni di un altro giorno? Il grafico a dispersione ci dirà qualcos'altro?
Esempio
Disegna due grafici sulla stessa figura:
import matplotlib.pyplot as plt
import numpy as np
#day one, the age
and speed of 13 cars:
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y)
#day two, the age and speed of 15 cars:
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y)
plt.show()
Risultato:
Nota: i due grafici sono tracciati con due colori diversi, per impostazione predefinita blu e arancione, imparerai come cambiare i colori più avanti in questo capitolo.
Confrontando i due grafici, penso si possa affermare con sicurezza che entrambi ci danno la stessa conclusione: più nuova è l'auto, più veloce è la guida.
Colori
Puoi impostare il tuo colore per ogni grafico a dispersione con
color
o l' c
argomento:
Esempio
Imposta il tuo colore dei pennarelli:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y, color = 'hotpink')
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')
plt.show()
Risultato:
Colora ogni punto
Puoi anche impostare un colore specifico per ogni punto usando una matrice di colori come valore per l'
c
argomento:
Nota: non è possibile utilizzare l' color
argomento per questo, solo l' c
argomento.
Esempio
Imposta il tuo colore dei pennarelli:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
Risultato:
ColorMap
Il modulo Matplotlib ha un certo numero di colormap disponibili.
Una mappa dei colori è come un elenco di colori, in cui ogni colore ha un valore che va da 0 a 100.
Ecco un esempio di mappa dei colori:
Questa mappa dei colori si chiama 'viridis' e come puoi vedere varia da 0, che è un colore viola, e fino a 100, che è un colore giallo.
Come usare la ColorMap
Puoi specificare la mappa dei colori con l'argomento della parola chiave
cmap
con il valore della mappa dei colori, in questo caso 'viridis'
che è una delle mappe dei colori integrate disponibili in Matplotlib.
Inoltre devi creare un array con valori (da 0 a 100), un valore per ciascuno dei punti del grafico a dispersione:
Esempio
Crea una matrice di colori e specifica una mappa dei colori nel grafico a dispersione:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.show()
Risultato:
Puoi includere la mappa dei colori nel disegno includendo la plt.colorbar()
dichiarazione:
Esempio
Includi la mappa dei colori reale:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()
Risultato:
Mappe dei colori disponibili
Puoi scegliere una qualsiasi delle mappe dei colori integrate:
Name | Reverse | |||
---|---|---|---|---|
Accent | Accent_r | |||
Blues | Blues_r | |||
BrBG | BrBG_r | |||
BuGn | BuGn_r | |||
BuPu | BuPu_r | |||
CMRmap | CMRmap_r | |||
Dark2 | Dark2_r | |||
GnBu | GnBu_r | |||
Greens | Greens_r | |||
Greys | Greys_r | |||
OrRd | OrRd_r | |||
Oranges | Oranges_r | |||
PRGn | PRGn_r | |||
Paired | Paired_r | |||
Pastel1 | Pastel1_r | |||
Pastel2 | Pastel2_r | |||
PiYG | PiYG_r | |||
PuBu | PuBu_r | |||
PuBuGn | PuBuGn_r | |||
PuOr | PuOr_r | |||
PuRd | PuRd_r | |||
Purples | Purples_r | |||
RdBu | RdBu_r | |||
RdGy | RdGy_r | |||
RdPu | RdPu_r | |||
RdYlBu | RdYlBu_r | |||
RdYlGn | RdYlGn_r | |||
Reds | Reds_r | |||
Set1 | Set1_r | |||
Set2 | Set2_r | |||
Set3 | Set3_r | |||
Spectral | Spectral_r | |||
Wistia | Wistia_r | |||
YlGn | YlGn_r | |||
YlGnBu | YlGnBu_r | |||
YlOrBr | YlOrBr_r | |||
YlOrRd | YlOrRd_r | |||
afmhot | afmhot_r | |||
autumn | autumn_r | |||
binary | binary_r | |||
bone | bone_r | |||
brg | brg_r | |||
bwr | bwr_r | |||
cividis | cividis_r | |||
cool | cool_r | |||
coolwarm | coolwarm_r | |||
copper | copper_r | |||
cubehelix | cubehelix_r | |||
flag | flag_r | |||
gist_earth | gist_earth_r | |||
gist_gray | gist_gray_r | |||
gist_heat | gist_heat_r | |||
gist_ncar | gist_ncar_r | |||
gist_rainbow | gist_rainbow_r | |||
gist_stern | gist_stern_r | |||
gist_yarg | gist_yarg_r | |||
gnuplot | gnuplot_r | |||
gnuplot2 | gnuplot2_r | |||
gray | gray_r | |||
hot | hot_r | |||
hsv | hsv_r | |||
inferno | inferno_r | |||
jet | jet_r | |||
magma | magma_r | |||
nipy_spectral | nipy_spectral_r | |||
ocean | ocean_r | |||
pink | pink_r | |||
plasma | plasma_r | |||
prism | prism_r | |||
rainbow | rainbow_r | |||
seismic | seismic_r | |||
spring | spring_r | |||
summer | summer_r | |||
tab10 | tab10_r | |||
tab20 | tab20_r | |||
tab20b | tab20b_r | |||
tab20c | tab20c_r | |||
terrain | terrain_r | |||
twilight | twilight_r | |||
twilight_shifted | twilight_shifted_r | |||
viridis | viridis_r | |||
winter | winter_r |
Misurare
È possibile modificare la dimensione dei punti con l'
s
argomento.
Proprio come i colori, assicurati che l'array per le dimensioni abbia la stessa lunghezza degli array per gli assi x e y:
Esempio
Imposta la tua dimensione per i pennarelli:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes)
plt.show()
Risultato:
Alfa
È possibile regolare la trasparenza dei punti con l'
alpha
argomento.
Proprio come i colori, assicurati che l'array per le dimensioni abbia la stessa lunghezza degli array per gli assi x e y:
Esempio
Imposta la tua dimensione per i pennarelli:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes, alpha=0.5)
plt.show()
Risultato:
Combina dimensione colore e alfa
Puoi combinare una mappa dei colori con dimensioni diverse sui punti. Questo è visualizzato meglio se i punti sono trasparenti:
Esempio
Crea array casuali con 100 valori per punti x, punti y, colori e dimensioni:
import matplotlib.pyplot as plt
import numpy as np
x =
np.random.randint(100, size=(100))
y = np.random.randint(100, size=(100))
colors = np.random.randint(100, size=(100))
sizes = 10 * np.random.randint(100,
size=(100))
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='nipy_spectral')
plt.colorbar()
plt.show()
Risultato: