Matplotlib Scatter
Vytváření bodových grafů
Pomocí funkce Pyplot můžete použít scatter()
funkci ke kreslení bodového grafu.
Funkce scatter()
vykreslí jednu tečku pro každé pozorování. Potřebuje dvě pole stejné délky, jedno pro hodnoty na ose x a jedno pro hodnoty na ose y:
Příklad
Jednoduchý bodový graf:
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()
Výsledek:
Pozorování ve výše uvedeném příkladu je výsledkem 13 projíždějících aut.
Osa X ukazuje, jak staré auto je.
Osa Y ukazuje rychlost vozu, když projíždí.
Existují mezi pozorováními nějaké vztahy?
Zdá se, že čím novější auto, tím rychleji jede, ale to by mohla být náhoda, vždyť jsme registrovali jen 13 aut.
Porovnejte pozemky
Ve výše uvedeném příkladu se zdá, že existuje vztah mezi rychlostí a věkem, ale co když vykreslíme pozorování také z jiného dne? Řekne nám rozptylová zápletka něco jiného?
Příklad
Nakreslete dva výkresy na stejný obrázek:
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()
Výsledek:
Poznámka: Tyto dva grafy jsou vykresleny dvěma různými barvami, ve výchozím nastavení modrou a oranžovou, o změně barev se dozvíte později v této kapitole.
Srovnáním dvou grafů si myslím, že lze s jistotou říci, že oba nám dávají stejný závěr: čím novější auto, tím rychleji jede.
Barvy
Pro každý bodový graf můžete nastavit vlastní barvu pomocí
argumentu color
nebo :c
Příklad
Nastavte si vlastní barvu značek:
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()
Výsledek:
Vybarvěte každý bod
Můžete dokonce nastavit konkrétní barvu pro každý bod pomocí pole barev jako hodnoty pro
c
argument:
Poznámka: K tomu nemůžete použít color
argument, pouze c
argument.
Příklad
Nastavte si vlastní barvu značek:
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()
Výsledek:
ColorMap
Modul Matplotlib má řadu dostupných barevných map.
Mapa barev je jako seznam barev, kde každá barva má hodnotu v rozsahu od 0 do 100.
Zde je příklad barevné mapy:
Tato barevná mapa se nazývá 'viridis' a jak můžete vidět, pohybuje se od 0, což je fialová barva, do 100, což je žlutá barva.
Jak používat ColorMap
Mapu barev můžete zadat pomocí argumentu klíčového slova
cmap
s hodnotou mapy barev, v tomto případě 'viridis'
to je jedna z vestavěných map barev dostupných v Matplotlib.
Kromě toho musíte vytvořit pole s hodnotami (od 0 do 100), jednu hodnotu pro každý bod v bodovém grafu:
Příklad
Vytvořte pole barev a určete mapu barev v bodovém grafu:
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()
Výsledek:
Mapu barev můžete do výkresu zahrnout tak, že zahrnete plt.colorbar()
prohlášení:
Příklad
Zahrňte skutečnou mapu barev:
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()
Výsledek:
Dostupné barevné mapy
Můžete si vybrat kteroukoli z vestavěných barevných map:
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 |
Velikost
s
Pomocí argumentu můžete změnit velikost teček
.
Stejně jako barvy se ujistěte, že pole velikostí má stejnou délku jako pole osy x a y:
Příklad
Nastavte si vlastní velikost značek:
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()
Výsledek:
Alfa
alpha
Pomocí argumentu můžete upravit průhlednost teček
.
Stejně jako barvy se ujistěte, že pole velikostí má stejnou délku jako pole osy x a y:
Příklad
Nastavte si vlastní velikost značek:
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()
Výsledek:
Kombinujte velikost barvy a alfa
Barevnou mapu můžete kombinovat s různými velikostmi bodů. To je nejlépe vizualizovat, pokud jsou tečky průhledné:
Příklad
Vytvořte náhodná pole se 100 hodnotami pro x-body, y-body, barvy a velikosti:
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()
Výsledek: