Matplotlib Scatter
Die skep van spreidingsplotte
Met Pyplot kan jy die scatter()
funksie gebruik om 'n spreidingsdiagram te teken.
Die scatter()
funksie teken een kolletjie vir elke waarneming. Dit benodig twee skikkings van dieselfde lengte, een vir die waardes van die x-as, en een vir waardes op die y-as:
Voorbeeld
'n Eenvoudige verspreidingsdiagram:
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:
Die waarneming in die voorbeeld hierbo is die resultaat van 13 motors wat verbyry.
Die X-as wys hoe oud die motor is.
Die Y-as wys die spoed van die motor wanneer dit verbyry.
Is daar enige verwantskappe tussen die waarnemings?
Dit blyk dat hoe nuwer die kar is, hoe vinniger ry hy, maar dit kan toevallig wees, ons het immers net 13 motors geregistreer.
Vergelyk erwe
In die voorbeeld hierbo blyk daar 'n verband tussen spoed en ouderdom te wees, maar wat as ons die waarnemings van 'n ander dag ook plot? Sal die verstrooiingsplot ons iets anders vertel?
Voorbeeld
Teken twee plotte op dieselfde 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:
Let wel: Die twee plotte is geteken met twee verskillende kleure, by verstek blou en oranje, jy sal later in hierdie hoofstuk leer hoe om kleure te verander.
Deur die twee plotte te vergelyk, dink ek dit is veilig om te sê dat hulle albei vir ons dieselfde gevolgtrekking gee: hoe nuwer die motor, hoe vinniger ry hy.
Kleure
Jy kan jou eie kleur vir elke verstrooiingsplot stel met die
color
of die c
argument:
Voorbeeld
Stel jou eie kleur van die merkers:
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 kolletjie in
Jy kan selfs 'n spesifieke kleur vir elke punt stel deur 'n verskeidenheid kleure as waarde vir die
c
argument te gebruik:
Let wel: Jy kan nie die color
argument hiervoor gebruik nie, net die c
argument.
Voorbeeld
Stel jou eie kleur van die merkers:
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:
Kleurkaart
Die Matplotlib-module het 'n aantal beskikbare kleurkaarte.
'n Kleurkaart is soos 'n lys kleure, waar elke kleur 'n waarde het wat wissel van 0 tot 100.
Hier is 'n voorbeeld van 'n kleurkaart:
Hierdie kleurkaart word 'viridis' genoem en soos jy kan sien wissel dit van 0, wat 'n pers kleur is, en tot 100, wat 'n geel kleur is.
Hoe om die ColorMap te gebruik
Jy kan die kleurkaart spesifiseer met die sleutelwoordargument
cmap
met die waarde van die kleurkaart, in hierdie geval 'viridis'
wat een van die ingeboude kleurkaarte is wat in Matplotlib beskikbaar is.
Daarbenewens moet jy 'n skikking skep met waardes (van 0 tot 100), een waarde vir elk van die punte in die spreidingsplot:
Voorbeeld
Skep 'n kleurskikking, en spesifiseer 'n kleurkaart in die 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])
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:
Jy kan die kleurkaart by die tekening insluit deur die plt.colorbar()
stelling in te sluit:
Voorbeeld
Sluit die werklike kleurkaart 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([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:
Beskikbare ColorMaps
Jy kan enige van die ingeboude kleurkaarte kies:
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 |
Grootte
Jy kan die grootte van die kolletjies met die
s
argument verander.
Net soos kleure, maak seker dat die skikking vir groottes dieselfde lengte het as die skikkings vir die x- en y-as:
Voorbeeld
Stel jou eie grootte vir die merkers:
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
Jy kan die deursigtigheid van die kolletjies met die
alpha
argument aanpas.
Net soos kleure, maak seker dat die skikking vir groottes dieselfde lengte het as die skikkings vir die x- en y-as:
Voorbeeld
Stel jou eie grootte vir die merkers:
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:
Kombineer kleurgrootte en alfa
Jy kan 'n kleurkaart met verskillende groottes op die kolletjies kombineer. Dit word die beste gevisualiseer as die kolletjies deursigtig is:
Voorbeeld
Skep ewekansige skikkings met 100 waardes vir x-punte, y-punte, kleure en groottes:
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: