Delplottar
Funktionen subplots()
från pyplot
används för detta specifika ändamål. Den användes tidigare för att skapa en arbetsyta i det första avsnittet, och nu kommer den att undersökas mer ingående.
Rader och kolumner
De viktigaste argumenten för denna funktion är nrows
och ncolumns
, vilka anger antalet rader och kolumner i subplotrutnätet. Som standard är båda satta till 1, vilket ger en enda plot (Axes
).
Funktionen subplots()
returnerar ett Figure
-objekt och antingen ett Axes
-objekt eller en array av Axes
-objekt, beroende på rutnätets storlek.
import matplotlib.pyplot as plt fig, axs = plt.subplots(2, 2) plt.show()
Ett 2 gånger 2 subplot-nät skapades.
Eftersom det finns flera subplots returnerar subplots
en array av Axes
-objekt, som vanligtvis lagras i en variabel kallad axs
(singulärt ax
används för en enskild plot).
I detta fall är axs
en tvådimensionell array, så du behöver både rad- och kolumnindex för att komma åt en specifik 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örsta raden (rad 0) innehåller två linjediagram, och den andra raden (rad 1) innehåller två spridningsdiagram.
Eftersom varje diagram placeras i en separat subplot kan plt.plot()
eller plt.scatter()
inte användas direkt. Det korrekta tillvägagångssättet är att anropa motsvarande metod på varje enskilt Axes
-objekt.
Omvandling till 1D-array
Det är också möjligt att använda metoden .ravel()
för att omvandla en tvådimensionell Axes
-array till en endimensionell kontinuerlig flattenad 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 en 2x2-array omvandlar axs.ravel()
den till en endimensionell array med fyra element.
Dela en axel
Funktionen subplots()
har även parametrarna sharex
och sharey
. Dessa styr om x- eller y-axlarna delas mellan delgrafer. Båda är som standard satta till 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()
Genom att ange sharex=True
delas x-axeln mellan alla delplottar, vilket är användbart här eftersom alla delplottar använder samma x-axelvärden.
Du kan även ange sharex
eller sharey
till 'row'
för att dela axeln inom varje rad av delplottar, eller 'col'
för att dela den inom varje kolumn av delplottar.
Som vanligt, utforska gärna mer i
subplots()
dokumentationen om du vill.
Swipe to start coding
- Använd rätt funktion för att skapa ett subplot-nät.
- Nätet ska ha 3 rader och 1 kolumn (ange de två första parametrarna).
- Ange det högra nyckelordet så att x-axeln delas mellan alla subplots.
- Spara resultatet av funktionen för att skapa subplots i variablerna
fig
ochaxs
(från vänster till höger). - Placera det första linjediagrammet för
data_linear
på den första raden (rad0
) i subplot-nätet. - Placera det andra linjediagrammet för
data_squared
på den andra raden (rad1
) i subplot-nätet. - Placera det tredje linjediagrammet för
data_exp
på den tredje raden (rad2
) i subplot-nätet.
Lösning
Tack för dina kommentarer!