Underplots
Funktionen subplots()
fra pyplot
tjener dette specifikke formål. Den blev tidligere brugt til at oprette et lærred i det første afsnit, og nu vil den blive undersøgt mere detaljeret.
Rækker og kolonner
De vigtigste argumenter for denne funktion er nrows
og ncolumns
, som angiver antallet af rækker og kolonner i subplot-gitteret. Som standard er begge sat til 1, så du får kun én plot (Axes
).
Funktionen subplots()
returnerer et Figure
-objekt og enten ét Axes
-objekt eller et array af Axes
-objekter, afhængigt af gitterets størrelse.
import matplotlib.pyplot as plt fig, axs = plt.subplots(2, 2) plt.show()
Et 2 gange 2 subplot-gitter blev oprettet.
Da der er flere subplots, returnerer subplots
et array af Axes
-objekter, som normalt gemmes i en variabel kaldet axs
(entalsformen ax
bruges til én plot).
I dette tilfælde er axs
et todimensionelt array, så du skal bruge både række- og kolonneindeks for at få adgang til et specifikt subplot.
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Creating a 2x2 subplot grid fig, axs = plt.subplots(2, 2) # Creating a different plot for each Axes object axs[0, 0].plot(data_linear) axs[0, 1].plot(data_squared) axs[1, 0].scatter(data_linear, data_linear) axs[1, 1].scatter(data_linear, data_squared) plt.show()
Den første række (række 0) indeholder to linjediagrammer, og den anden række (række 1) indeholder to spredningsdiagrammer.
Da hvert diagram placeres på et separat subplot, kan plt.plot()
eller plt.scatter()
ikke anvendes direkte. Den korrekte metode er at kalde den tilsvarende metode på hvert enkelt Axes
-objekt.
Konvertering til 1D-array
Det er også muligt at bruge .ravel()
-metoden til at konvertere et 2D Axes
-array til et 1D sammenhængende fladet array:
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Creating a 2x2 subplot grid fig, axs = plt.subplots(2, 2) # Flattening axs to a 1D array for easier indexing axs = axs.ravel() # Creating a different plot for each Axes object axs[0].plot(data_linear) axs[1].plot(data_squared) axs[2].scatter(data_linear, data_linear) axs[3].scatter(data_linear, data_squared) plt.show()
Med et 2x2 array konverterer axs.ravel()
det til et 1D-array, der indeholder fire elementer.
Deling af en akse
Funktionen subplots()
har også parametrene sharex
og sharey
. De styrer, om x- eller y-aksen deles på tværs af underplots. Begge er som standard sat til False
.
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Create a 2x2 subplot grid with shared x-axis across all subplots fig, axs = plt.subplots(2, 2, sharex=True) # Flatten axs array for easier indexing axs = axs.ravel() # Plotting different data on each subplot axs[0].plot(data_linear) axs[1].plot(data_squared) axs[2].scatter(data_linear, data_linear) axs[3].scatter(data_linear, data_squared) plt.show()
Indstillingen sharex=True
deler x-aksen på alle underplots, hvilket er nyttigt her, da alle underplots bruger de samme x-akseværdier.
Du kan også sætte sharex
eller sharey
til 'row'
for at dele aksen inden for hver række af underplots, eller 'col'
for at dele den inden for hver kolonne af underplots.
Som sædvanlig er du velkommen til at udforske mere i
subplots()
dokumentationen hvis du ønsker det.
Swipe to start coding
- Brug den korrekte funktion til at oprette et subplot-gitter.
- Gitteret skal have 3 rækker og 1 kolonne (angiv de to første parametre).
- Angiv det yderste nøgleord-argument, så x-aksen deles mellem alle subplots.
- Gem resultatet af funktionen til oprettelse af subplots i variablerne
fig
ogaxs
(fra venstre mod højre). - Placer det første linjediagram for
data_linear
på den første række (række0
) i subplot-gitteret. - Placer det andet linjediagram for
data_squared
på den anden række (række1
) i subplot-gitteret. - Placer det tredje linjediagram for
data_exp
på den tredje række (række2
) i subplot-gitteret.
Løsning
Tak for dine kommentarer!