Subplots
De functie subplots()
van pyplot
dient dit specifieke doel. Deze werd eerder gebruikt om een canvas te creëren in de eerste sectie, en zal nu in meer detail worden onderzocht.
Rijen en Kolommen
De belangrijkste argumenten van deze functie zijn nrows
en ncolumns
, waarmee het aantal rijen en kolommen in het subplotraster wordt ingesteld. Standaard zijn beide 1, waardoor je één enkele plot (Axes
) krijgt.
De functie subplots()
retourneert een Figure
-object en ofwel één Axes
-object of een array van Axes
-objecten, afhankelijk van de grootte van het raster.
import matplotlib.pyplot as plt fig, axs = plt.subplots(2, 2) plt.show()
Er is een 2 bij 2 subplotraster aangemaakt.
Omdat er meerdere subplots zijn, retourneert subplots
een array van Axes
-objecten, meestal opgeslagen in een variabele genaamd axs
(enkelvoud ax
is voor één plot).
In dit geval is axs
een tweedimensionale array, dus zijn zowel een rij- als kolomindex nodig om een specifieke subplot te benaderen.
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()
De eerste rij (rij 0) bevat twee lijndiagrammen en de tweede rij (rij 1) bevat twee spreidingsdiagrammen.
Aangezien elke plot op een afzonderlijke subplot wordt geplaatst, kunnen plt.plot()
of plt.scatter()
niet direct worden gebruikt. De juiste aanpak is om de overeenkomstige methode aan te roepen op elk individueel Axes
-object.
Omzetten naar een 1D-array
Het is ook mogelijk om de .ravel()
-methode te gebruiken om een 2D Axes
-array om te zetten naar een 1D aaneengesloten afgevlakte 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()
Met een 2x2-array zet axs.ravel()
deze om naar een 1D-array met vier elementen.
Assen delen
De functie subplots()
heeft ook de parameters sharex
en sharey
. Hiermee wordt bepaald of de x- of y-as gedeeld wordt tussen subplots. Beide staan standaard op 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()
Door sharex=True
in te stellen, wordt de x-as gedeeld over alle subplots. Dit is handig omdat alle subplots dezelfde x-as waarden gebruiken.
Je kunt sharex
of sharey
ook instellen op 'row'
om de as binnen elke rij van subplots te delen, of op 'col'
om deze binnen elke kolom van subplots te delen.
Zoals gebruikelijk kun je meer ontdekken in de
subplots()
documentatie indien je verder wilt verdiepen.
Swipe to start coding
- Gebruik de juiste functie om een subplotraster te maken.
- Het raster moet 3 rijen en 1 kolom hebben (specificeer de eerste twee parameters).
- Specificeer het meest rechtse keyword-argument zodat de x-as gedeeld wordt door alle subplots.
- Sla het resultaat van de functie voor het maken van subplots op in de variabelen
fig
enaxs
(van links naar rechts). - Plaats de eerste lijngrafiek voor
data_linear
op de eerste rij (rij0
) van het subplotraster. - Plaats de tweede lijngrafiek voor
data_squared
op de tweede rij (rij1
) van het subplotraster. - Plaats de derde lijngrafiek voor
data_exp
op de derde rij (rij2
) van het subplotraster.
Oplossing
Bedankt voor je feedback!