Matplotlib Scatter
Scatterplots maken
Met Pyplot kunt u de scatter()
functie gebruiken om een spreidingsplot te tekenen.
De scatter()
functie plot één punt voor elke waarneming. Het heeft twee arrays van dezelfde lengte nodig, één voor de waarden van de x-as en één voor waarden op de y-as:
Voorbeeld
Een eenvoudig spreidingsdiagram:
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()
Resultaat:
De waarneming in bovenstaand voorbeeld is het resultaat van 13 passerende auto's.
De X-as laat zien hoe oud de auto is.
De Y-as toont de snelheid van de auto wanneer deze passeert.
Zijn er verbanden tussen de waarnemingen?
Het lijkt erop dat hoe nieuwer de auto, hoe sneller hij rijdt, maar dat kan toeval zijn, we hebben tenslotte maar 13 auto's geregistreerd.
Percelen vergelijken
In bovenstaand voorbeeld lijkt er een relatie te zijn tussen snelheid en leeftijd, maar wat als we de waarnemingen ook van een andere dag plotten? Zal de scatterplot ons iets anders vertellen?
Voorbeeld
Teken twee plots op dezelfde figuur:
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()
Resultaat:
Opmerking: de twee plots zijn geplot met twee verschillende kleuren, standaard blauw en oranje. U zult later in dit hoofdstuk leren hoe u de kleuren kunt wijzigen.
Door de twee grafieken te vergelijken, denk ik dat het veilig is om te zeggen dat ze ons allebei dezelfde conclusie geven: hoe nieuwer de auto, hoe sneller hij rijdt.
kleuren
U kunt uw eigen kleur voor elk spreidingsdiagram instellen met
color
het c
argument of:
Voorbeeld
Stel je eigen kleur van de markeringen in:
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()
Resultaat:
Kleur elke stip
U kunt zelfs een specifieke kleur voor elke punt instellen door een reeks kleuren als waarde voor het
c
argument te gebruiken:
Let op: U kunt hiervoor niet het color
argument gebruiken, alleen het c
argument.
Voorbeeld
Stel je eigen kleur van de markeringen in:
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()
Resultaat:
Kleurenkaart
De Matplotlib-module heeft een aantal beschikbare kleurenkaarten.
Een kleurenkaart is als een lijst met kleuren, waarbij elke kleur een waarde heeft die varieert van 0 tot 100.
Hier is een voorbeeld van een kleurenkaart:
Deze kleurenkaart wordt 'viridis' genoemd en zoals u kunt zien varieert deze van 0, wat een paarse kleur is, en tot 100, wat een gele kleur is.
Hoe de ColorMap te gebruiken
U kunt de kleurenkaart specificeren met het trefwoordargument
cmap
met de waarde van de kleurenkaart, in dit geval 'viridis'
een van de ingebouwde kleurenkaarten die beschikbaar zijn in Matplotlib.
Bovendien moet u een array maken met waarden (van 0 tot 100), één waarde voor elk punt in de spreidingsplot:
Voorbeeld
Maak een kleurenarray en specificeer een kleurenkaart in de spreidingsplot:
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()
Resultaat:
U kunt de kleurenkaart in de tekening opnemen door de plt.colorbar()
verklaring op te nemen:
Voorbeeld
Voeg de werkelijke kleurenkaart toe:
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()
Resultaat:
Beschikbare kleurenkaarten
U kunt een van de ingebouwde kleurenkaarten kiezen:
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 |
Maat
U kunt de grootte van de punten wijzigen met het
s
argument.
Zorg ervoor dat, net als kleuren, de array voor maten dezelfde lengte heeft als de arrays voor de x- en y-as:
Voorbeeld
Stel je eigen maat in voor de markeringen:
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()
Resultaat:
Alfa
U kunt de transparantie van de punten aanpassen met het
alpha
argument.
Zorg ervoor dat, net als kleuren, de array voor maten dezelfde lengte heeft als de arrays voor de x- en y-as:
Voorbeeld
Stel je eigen maat in voor de markeringen:
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()
Resultaat:
Combineer kleurgrootte en alfa
Je kunt een kleurenkaart combineren met verschillende maten op de stippen. Dit wordt het best gevisualiseerd als de stippen transparant zijn:
Voorbeeld
Maak willekeurige arrays met 100 waarden voor x-punten, y-punten, kleuren en maten:
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()
Resultaat: