0Pricing
Pandas & NumPy Academy · Lekcja

Architektura Figure i Axes

Poznaj hierarchię Figure-Axes-Artist, twórz wykresy za pomocą plt.subplots() i rozróżniaj bezstanowe oraz obiektowe API.

Architektura Figure i Axes to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Dlaczego warto poznać architekturę Matplotlib?

Zarówno Pandas, jak i Seaborn wewnętrznie korzystają z Matplotlib. Zrozumienie hierarchii obiektów Matplotlib pozwala kontrolować każdy element wykresu — od całego obszaru roboczego po poszczególne znaczniki osi — oraz łączyć wiele wykresów w jednej figurze. Bez zrozumienia modelu Figure-Axes dostosowywanie wykresów szybko staje się frustrującym zgadywaniem, której funkcji użyć.

Figure: obszar roboczy

Figure to najbardziej zewnętrzny kontener — całe okno lub plik obrazu. Zawiera co najmniej jeden obiekt Axes (właściwy obszar wykresu), a także tytuł, wspólne legendy i puste miejsce. Figure można utworzyć za pomocą plt.figure() lub pośrednio za pomocą plt.subplots(). Większość właściwości ustawionych dla Figure wpływa na cały obszar roboczy: rozmiar, kolor tła i tytuł całości.

import matplotlib.pyplot as plt
import numpy as np

# Create a Figure with a specific size
fig = plt.figure(figsize=(8, 4))  # width=8 inches, height=4 inches
print(type(fig))  # matplotlib.figure.Figure
print('Figure size:', fig.get_size_inches())
plt.close()  # close to avoid display in scripts

Axes: miejsce tworzenia wykresu

Obiekt Axes to pojedynczy obszar wykresu wewnątrz Figure. Zawiera oś x, oś y, znaczniki osi, linie siatki i wszystkie elementy wizualne (linie, słupki, punkty wykresu rozrzutu). Większość wywołań funkcji wykresów to metody obiektu Axes: ax.plot(), ax.bar(), ax.scatter(). Jedna Figure może zawierać wiele obiektów Axes rozmieszczonych w siatce podwykresów.

fig, ax = plt.subplots()  # Creates Figure + one Axes
print(type(ax))  # matplotlib.axes.Axes

x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x))  # plot on the Axes
plt.tight_layout()
# plt.show()
plt.close()

plt.subplots(): jednoczesne tworzenie Figure i Axes

plt.subplots(nrows, ncols) to zalecany sposób tworzenia Figure z jednym lub wieloma obiektami Axes w układzie siatki. Funkcja zwraca krotkę (fig, ax) (lub (fig, axes_array) w przypadku wielu podwykresów). Parametr figsize określa całkowity rozmiar obszaru roboczego w calach. Dla zachowania czytelności wynik należy zawsze przypisywać do nazwanych zmiennych.

# Single plot
fig, ax = plt.subplots(figsize=(6, 4))

# 2 rows, 1 column
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(6, 8))

# 2 rows, 2 columns
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
ax_top_left = axes[0, 0]
ax_top_right = axes[0, 1]
print('axes shape:', axes.shape)  # (2, 2)
plt.close('all')

API obiektowe a API stanowe

Matplotlib oferuje dwa style użycia. API stanowe (pyplot) korzysta z plt.plot(), plt.xlabel() itd. i działa na „bieżących” osiach — jest wygodne podczas szybkiej interaktywnej eksploracji. API obiektowe (OO) jawnie wywołuje metody na obiektach ax: ax.plot(), ax.set_xlabel(). API OO jest zdecydowanie zalecane w kodzie produkcyjnym i przy tworzeniu figur z wieloma panelami, ponieważ jednoznacznie wskazuje, które osie są modyfikowane.

x = [1, 2, 3, 4]
y = [1, 4, 9, 16]

# Stateful API (convenient but fragile)
# plt.plot(x, y)
# plt.xlabel('x')
# plt.title('Squares')

# Object-oriented API (preferred)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('x')
ax.set_title('Squares')
plt.close()

Artists: elementy składowe

Wszystko, co jest widoczne na wykresie Matplotlib, jest obiektem Artist: Figure, Axes, linie, tekst, elementy graficzne (prostokąty reprezentujące słupki) oraz znaczniki. Hierarchia Figure–Axes–Artist rozciąga się od najbardziej zewnętrznego kontenera do najmniejszego elementu wizualnego. Zrozumienie tej hierarchii pomaga programowo znaleźć i zmodyfikować dowolny element — na przykład zmienić kolor konkretnego słupka po narysowaniu wykresu.

fig, ax = plt.subplots()
line, = ax.plot([1, 2, 3], [1, 4, 9], color='blue', linewidth=2)

# Introspect the hierarchy
print('Figure:', type(fig))
print('Axes:', type(ax))
print('Line Artist:', type(line))
print('Line color:', line.get_color())
plt.close()

Obiekty osi: XAxis i YAxis

Każdy obiekt Axes zawiera dwa obiekty Axis (których nie należy mylić z Axes): ax.xaxis i ax.yaxis. Sterują one znacznikami podziałki, ich etykietami oraz obramowaniem osi (widoczną linią). Zakres osi można ustawić za pomocą ax.set_xlim() i ax.set_ylim(), częstotliwość znaczników kontrolować za pomocą ax.set_xticks(), a format etykiet określić za pomocą ax.xaxis.set_major_formatter().

fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [10, 40, 30, 70])

ax.set_xlim(0, 5)
ax.set_ylim(0, 80)
ax.set_xticks([1, 2, 3, 4])
ax.set_xticklabels(['Q1', 'Q2', 'Q3', 'Q4'])
ax.set_xlabel('Quarter')
ax.set_ylabel('Revenue')
plt.close()

Współdzielone osie na wykresach wielopanelowych

Podczas tworzenia siatki wykresów podrzędnych przekaż do plt.subplots() argument sharex=True lub sharey=True, aby połączyć skale osi między panelami. Oznacza to, że powiększenie lub przesunięcie jednego wykresu podrzędnego automatycznie aktualizuje wszystkie panele współdzielące tę oś — jest to niezbędne podczas porównywania szeregów czasowych dla wielu grup, gdy w każdym panelu powinien być pokazany ten sam zakres osi x.

import numpy as np

x = np.arange(10)
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(6, 5))

ax1.plot(x, x**2, color='blue')
ax1.set_title('Squares')

ax2.plot(x, x**3, color='red')
ax2.set_title('Cubes')

fig.suptitle('Powers of x')  # shared figure title
plt.tight_layout()
plt.close()

Odstępy za pomocą tight_layout()

plt.tight_layout() (lub fig.tight_layout()) automatycznie dopasowuje parametry wykresów podrzędnych, aby zminimalizować nachodzenie na siebie etykiet, tytułów i znaczników podziałki. Wywołaj tę funkcję tuż przed plt.show() lub fig.savefig(). Aby precyzyjnie kontrolować odstępy, użyj plt.subplots_adjust(hspace=, wspace=) i ręcznie ustaw pionową oraz poziomą przestrzeń między wykresami podrzędnymi.

fig, axes = plt.subplots(2, 2, figsize=(10, 8))

for i, ax in enumerate(axes.flat):
    ax.plot([1, 2, 3], [i, i+1, i+2])
    ax.set_title(f'Panel {i+1}')
    ax.set_xlabel('x axis label')
    ax.set_ylabel('y axis label')

fig.suptitle('Grid of Plots', y=1.02)
plt.tight_layout()  # prevents overlapping labels
plt.close()

Pobieranie obiektów Axes z subplots()

Gdy plt.subplots(nrows, ncols) zwraca wiele obiektów axes, są one umieszczane w tablicy NumPy o kształcie (nrows, ncols). Indeksuj je tak jak dowolną tablicę 2D: axes[0, 1] oznacza pierwszy wiersz i drugą kolumnę. Użyj axes.flat, aby iterować po wszystkich obiektach axes w kolejności wierszami, niezależnie od kształtu siatki — jest to bardzo wygodne, gdy chcesz zastosować to samo formatowanie do każdego panelu.

fig, axes = plt.subplots(2, 3, figsize=(12, 6))

# Access by row, column
axes[0, 0].set_title('Top Left')
axes[1, 2].set_title('Bottom Right')

# Iterate over all axes
for ax in axes.flat:
    ax.set_xlabel('Time')
    ax.set_ylabel('Value')

plt.tight_layout()
plt.close()

Usuwanie niewykorzystanych osi

Gdy tworzysz siatkę wykresów podrzędnych, ale nie używasz każdego panelu, puste osie nadal wyświetlają obramowanie. Wywołaj ax.set_visible(False) lub fig.delaxes(ax), aby ukryć albo usunąć niewykorzystane osie. Często stosuje się iterowanie po axes.flat i ukrywanie wszystkich paneli znajdujących się za liczbą rysowanych serii danych, aby zachować przejrzystość wykresu.

fig, axes = plt.subplots(2, 3, figsize=(12, 6))
data_panels = 4  # only 4 plots needed in a 2x3 grid

for i, ax in enumerate(axes.flat):
    if i < data_panels:
        ax.plot([1, 2, 3], [i, i+1, i+2])
        ax.set_title(f'Panel {i+1}')
    else:
        ax.set_visible(False)  # hide extra panels

plt.tight_layout()
plt.close()

Szybki test

Sprawdź swoją znajomość architektury Figure i Axes w Matplotlib z tego rozdziału.

Podsumowanie lekcji

W tej lekcji dowiedziałeś się, że: Figure to całe płótno, a Axes to pojedynczy obszar wykresu znajdujący się na tym płótnie; plt.subplots() tworzy oba te obiekty jednocześnie i zwraca (fig, ax); preferowane jest obiektowe API (ax.plot(), ax.set_xlabel()) zamiast stanowego API pyplot; a tight_layout() zapobiega nachodzeniu etykiet na siebie na wykresach wielopanelowych. Następnie utworzymy wykresy liniowe i punktowe z pełną kontrolą nad stylem.

Często zadawane pytania

Czy lekcja „Architektura Figure i Axes” jest bezpłatna?

Tak — pełny tekst „Architektura Figure i Axes” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Architektura Figure i Axes”?

Poznaj hierarchię Figure-Axes-Artist, twórz wykresy za pomocą plt.subplots() i rozróżniaj bezstanowe oraz obiektowe API. Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Architektura Figure i Axes”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Architektura Figure i Axes
  2. Wykresy liniowe i punktowe
  3. Wykresy słupkowe i histogramy
  4. Etykiety, tytuły i zapisywanie wykresów
← Powrót do Pandas & NumPy Academy