Rozproszenie Matplotlib
Tworzenie wykresów punktowych
Dzięki Pyplot możesz użyć tej scatter()
funkcji do narysowania wykresu punktowego.
Funkcja scatter()
wykreśla jedną kropkę dla każdej obserwacji. Potrzebne są dwie tablice o tej samej długości, jedna dla wartości na osi x, a druga dla wartości na osi y:
Przykład
Prosty wykres punktowy:
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()
Wynik:
Obserwacja w powyższym przykładzie jest wynikiem przejeżdżania 13 samochodów.
Oś X pokazuje, ile lat ma samochód.
Oś Y pokazuje prędkość przejeżdżającego samochodu.
Czy są jakieś związki między obserwacjami?
Wydaje się, że im nowszy samochód tym szybciej jeździ, ale to może być przypadek, w końcu zarejestrowaliśmy tylko 13 aut.
Porównaj działki
W powyższym przykładzie wydaje się, że istnieje związek między szybkością a wiekiem, ale co, jeśli wykreślimy obserwacje z innego dnia? Czy wykres punktowy powie nam coś jeszcze?
Przykład
Narysuj dwa wykresy na tej samej figurze:
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()
Wynik:
Uwaga: Dwa wykresy są kreślone w dwóch różnych kolorach, domyślnie niebieskim i pomarańczowym, w dalszej części tego rozdziału dowiesz się, jak zmienić kolory.
Porównując te dwa wykresy, myślę, że można śmiało powiedzieć, że oba prowadzą do tego samego wniosku: im nowszy samochód, tym szybciej jeździ.
Zabarwienie
Możesz ustawić własny kolor dla każdego wykresu punktowego za
pomocą
argumentu color
lub :c
Przykład
Ustaw własny kolor znaczników:
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()
Wynik:
Pokoloruj każdą kropkę
Możesz nawet ustawić określony kolor dla każdej kropki, używając tablicy kolorów jako wartości
c
argumentu:
Uwaga: nie możesz użyć do color
tego argumentu, tylko c
argumentu.
Przykład
Ustaw własny kolor znaczników:
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()
Wynik:
Mapa kolorów
Moduł Matplotlib posiada wiele dostępnych map kolorów.
Mapa kolorów jest jak lista kolorów, gdzie każdy kolor ma wartość z zakresu od 0 do 100.
Oto przykład mapy kolorów:
Ta mapa kolorów nazywa się 'viridis' i jak widać waha się od 0, co jest kolorem fioletowym, do 100, co jest kolorem żółtym.
Jak korzystać z mapy kolorów
Możesz określić mapę kolorów za pomocą argumentu słowa kluczowego
cmap
z wartością mapy kolorów, w tym przypadku 'viridis'
jest to jedna z wbudowanych map kolorów dostępnych w Matplotlib.
Dodatkowo musisz utworzyć tablicę z wartościami (od 0 do 100), po jednej wartości dla każdego punktu na wykresie punktowym:
Przykład
Utwórz tablicę kolorów i określ mapę kolorów na wykresie punktowym:
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()
Wynik:
Możesz dołączyć mapę kolorów do rysunku, dołączając plt.colorbar()
oświadczenie:
Przykład
Dołącz aktualną mapę kolorów:
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()
Wynik:
Dostępne mapy kolorów
Możesz wybrać dowolną z wbudowanych map kolorów:
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 |
Rozmiar
Możesz zmienić rozmiar kropek za pomocą
s
argumentu.
Podobnie jak w przypadku kolorów, upewnij się, że tablica rozmiarów ma taką samą długość jak tablice dla osi x i y:
Przykład
Ustaw własny rozmiar znaczników:
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()
Wynik:
Alfa
Możesz dostosować przezroczystość kropek za pomocą
alpha
argumentu.
Podobnie jak w przypadku kolorów, upewnij się, że tablica rozmiarów ma taką samą długość jak tablice dla osi x i y:
Przykład
Ustaw własny rozmiar znaczników:
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()
Wynik:
Połącz rozmiar koloru i alfa
Możesz połączyć mapę kolorów z różnymi rozmiarami kropek. Najlepiej to zobrazować, jeśli kropki są przezroczyste:
Przykład
Twórz losowe tablice ze 100 wartościami dla punktów x, punktów y, kolorów i rozmiarów:
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()
Wynik: