Funkcja subplot pozwala na tworzenie wielu wykresów w pojedynczym oknie lub figurze. Dzięki temu można porównać różne wykresy, które mają wspólny kontekst lub prezentować różne aspekty danych.
Składnia funkcji to plt.subplot(nrows, ncols, index, **kwargs), gdzie:
nrows - liczba wierszy w siatce wykresów.
ncols - liczba kolumn w siatce wykresów.
index - indeks bieżącego wykresu, który ma być utworzony (indeksacja zaczyna się od 1). Indeksy są numerowane wierszami, tzn. kolejny wykres w rzędzie będzie miał indeks o jeden większy.
**kwargs - dodatkowe argumenty dotyczące formatowania wykresu.
import matplotlib.pyplot as pltimport numpy as npx = np.linspace(0, 2* np.pi, 100)# Tworzenie siatki wykresów 2x2# Pierwszy wykres (w lewym górnym rogu)plt.subplot(2, 2, 1)plt.plot(x, np.sin(x))plt.title('sin(x)')# Drugi wykres (w prawym górnym rogu)plt.subplot(2, 2, 2)plt.plot(x, np.cos(x))plt.title('cos(x)')# Trzeci wykres (w lewym dolnym rogu)plt.subplot(2, 2, 3)plt.plot(x, np.tan(x))plt.title('tan(x)')# Czwarty wykres (w prawym dolnym rogu)plt.subplot(2, 2, 4)plt.plot(x, -np.sin(x))plt.title('-sin(x)')# Dopasowanie odstępów między wykresamiplt.tight_layout()# Wyświetlenie wykresówplt.show()
import numpy as npimport matplotlib.pyplot as pltx = np.arange(0, 3, 0.1)plt.subplot(2, 2, 1)plt.plot(x, x)plt.subplot(2, 2, 2)plt.plot(x, x *2)plt.subplot(2, 2, 3)plt.plot(x, x * x)plt.subplot(2, 2, 4)plt.plot(x, x **3)plt.tight_layout()plt.show()
import numpy as npimport matplotlib.pyplot as pltx = np.arange(0, 3, 0.1)fig, axes = plt.subplots(2, 2)axes[0, 0].plot(x, x)axes[0, 1].plot(x, x *2)axes[1, 0].plot(x, x * x)axes[1, 1].plot(x, x **3)fig.tight_layout()plt.show()
import numpy as npimport matplotlib.pyplot as plt# Przygotowanie danych do wizualizacjix = np.linspace(0, 10, 100) # Tworzymy 100 punktów w zakresie od 0 do 10y1 = np.sin(x) # Funkcja sinusy2 = np.cos(x) # Funkcja cosinusy3 = np.exp(-0.2*x) * np.sin(x) # Funkcja tłumionego sinusay4 = x**2/20# Funkcja kwadratowa# Tworzenie figury i podwykresów (2 rzędy, 2 kolumny)# W podejściu proceduralnym używamy pyplot bezpośrednioplt.figure(figsize=(12, 8)) # Ustawiamy rozmiar całej figury (szerokość, wysokość w calach)# Pierwszy podwykres (lewy górny)plt.subplot(2, 2, 1) # 2 rzędy, 2 kolumny, pozycja 1plt.plot(x, y1, 'r-', linewidth=2) # Czerwona liniaplt.title('Funkcja sinus')plt.xlabel('X')plt.ylabel('sin(x)')plt.grid(True) # Dodajemy siatkęplt.axhline(y=0, color='k', linestyle='-', alpha=0.3) # Linia pozioma na y=0# Drugi podwykres (prawy górny)plt.subplot(2, 2, 2) # 2 rzędy, 2 kolumny, pozycja 2plt.plot(x, y2, 'b-', linewidth=2) # Niebieska liniaplt.title('Funkcja cosinus')plt.xlabel('X')plt.ylabel('cos(x)')plt.grid(True)plt.axhline(y=0, color='k', linestyle='-', alpha=0.3)# Trzeci podwykres (lewy dolny)plt.subplot(2, 2, 3) # 2 rzędy, 2 kolumny, pozycja 3plt.plot(x, y3, 'g-', linewidth=2) # Zielona liniaplt.title('Tłumiony sinus')plt.xlabel('X')plt.ylabel('exp(-0.2x) * sin(x)')plt.grid(True)plt.axhline(y=0, color='k', linestyle='-', alpha=0.3)# Czwarty podwykres (prawy dolny)plt.subplot(2, 2, 4) # 2 rzędy, 2 kolumny, pozycja 4plt.plot(x, y4, 'orange', linewidth=2, linestyle='--', marker='o', markevery=10, markersize=5)plt.title('Funkcja kwadratowa')plt.xlabel('X')plt.ylabel('x²/20')plt.grid(True)# Dodanie adnotacji na ostatnim wykresieplt.annotate('Punkt (5, 1.25)', xy=(5, 1.25), xytext=(6, 1.8), arrowprops=dict(facecolor='black', shrink=0.05, width=1.5))# Dostosowanie układu wykresów - zapobiega nakładaniu sięplt.tight_layout()# Dodanie ogólnego tytułu dla całej figuryplt.suptitle('Przykład wykresów z podwykresami - podejście proceduralne', fontsize=16)plt.subplots_adjust(top=0.9) # Dodanie miejsca na główny tytuł# Wyświetlenie wykresuplt.show()