0Pricing
Pandas & NumPy Academy · Lekcja

Etykiety, tytuły i zapisywanie wykresów

Dodawaj etykiety osi, tytuł, legendę i formatowanie znaczników osi, a następnie zapisuj wykresy o jakości publikacyjnej za pomocą savefig().

Etykiety, tytuły i zapisywanie wykresów to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 4 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.

Od wykresu do publikacji

Wykres jest skuteczny tylko wtedy, gdy jego osie są opisane, tytuł wyjaśnia najważniejszy wniosek, a plik zostaje zapisany w wystarczającej rozdzielczości dla docelowego zastosowania. W tym rozdziale omówiono wykończeniowe elementy, które przekształcają szybki wykres eksploracyjny w dopracowaną ilustrację odpowiednią do raportu, pulpitu nawigacyjnego lub publikacji naukowej: etykiety osi, formatowanie znaczników, tytuły, legendy, adnotacje i eksport pliku.

Etykiety osi za pomocą set_xlabel i set_ylabel

Opisowe etykiety osi należy ustawiać za pomocą ax.set_xlabel() i ax.set_ylabel(). W etykiecie zawsze należy uwzględniać jednostki (na przykład 'Revenue (USD)', a nie tylko 'Revenue'). Parametru fontsize można użyć do powiększenia etykiet na potrzeby prezentacji, a labelpad do dodania odstępu między osią a tekstem etykiety, gdy znaczniki są duże.

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(figsize=(7, 4))
x = np.arange(1, 13)
y = np.random.randint(100, 500, 12)
ax.plot(x, y, 'o-', color='steelblue')

ax.set_xlabel('Month', fontsize=12, labelpad=8)
ax.set_ylabel('Revenue (USD thousands)', fontsize=12, labelpad=8)
# plt.show()
plt.close()

Tytuły za pomocą set_title i suptitle

ax.set_title() ustawia tytuł nad pojedynczym obiektem Axes. W przypadku wykresów wielopanelowych fig.suptitle() dodaje wspólny tytuł nad wszystkimi podwykresami. Rozmiarem czcionki można sterować za pomocą fontsize, a położeniem w pionie za pomocą y (wartość domyślna to 1.0). Dobry tytuł przedstawia najważniejszy wniosek z wykresu, a nie tylko opisuje osie — proszę porównać 'Monthly Revenue' z 'Revenue Peaked in Q3 and Fell 20% in Q4'.

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
ax1.plot([1,2,3], [1,4,9])
ax1.set_title('Subplot One', fontsize=11)

ax2.bar(['A','B','C'], [3,7,2])
ax2.set_title('Subplot Two', fontsize=11)

# Shared figure title
fig.suptitle('Annual Overview Dashboard', fontsize=14, fontweight='bold', y=1.02)
plt.tight_layout()
plt.close()

Sterowanie etykietami znaczników

Domyślne etykiety znaczników Matplotlib są często wystarczające, ale czasami potrzebne są etykiety niestandardowe. Za pomocą ax.set_xticks() można określić położenie znaczników, a za pomocą ax.set_xticklabels() ustawić ich etykiety. Parametr rotation=45 pozwala pochylić długie etykiety, aby się nie nakładały. Parametr ha='right' (wyrównanie w poziomie) sprawia, że obrócone etykiety są poprawnie zakotwiczone przy odpowiadających im znacznikach.

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
values = np.random.randint(200, 600, 12)

fig, ax = plt.subplots(figsize=(9, 4))
ax.bar(range(12), values, color='steelblue')
ax.set_xticks(range(12))
ax.set_xticklabels(months, rotation=45, ha='right', fontsize=10)
ax.set_ylabel('Revenue')
plt.tight_layout()
plt.close()

Formatowanie wartości znaczników

Za pomocą formatterów z matplotlib.ticker można wyświetlać wartości znaczników w czytelnym dla człowieka formacie. FuncFormatter przyjmuje funkcję, która otrzymuje wartość znacznika i zwraca sformatowany tekst. Typowe zastosowania obejmują separator tysięcy, symbol waluty, znak procentu i notację naukową. Formatter należy zastosować za pomocą ax.yaxis.set_major_formatter(formatter).

from matplotlib.ticker import FuncFormatter

def millions_fmt(x, pos):
    return f'${x/1e6:.1f}M'

fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(['Q1', 'Q2', 'Q3', 'Q4'], [1.2e6, 1.8e6, 2.1e6, 1.9e6], color='steelblue')
ax.yaxis.set_major_formatter(FuncFormatter(millions_fmt))
ax.set_title('Quarterly Revenue')
ax.set_ylabel('Revenue')
plt.tight_layout()
plt.close()

Legendy za pomocą ax.legend()

Wywołanie ax.legend() wyświetla legendę dla wszystkich elementów wykresu, dla których ustawiono parametr label. Wygląd legendy można dostosować za pomocą parametrów loc (położenie, na przykład 'upper right' lub 'lower left'), ncol (liczba kolumn), framealpha (przezroczystość ramki) i fontsize. Umieszczenie legendy poza obszarem wykresu wymaga użycia bbox_to_anchor razem z loc.

fig, ax = plt.subplots(figsize=(7, 4))
for region, color in [('East','steelblue'),('West','coral'),('North','green')]:
    ax.plot(range(12), np.random.randint(100, 400, 12),
            marker='o', label=region, color=color)

ax.legend(loc='upper right', ncol=1, framealpha=0.8, fontsize=10)
ax.set_title('Monthly Sales by Region')
plt.close()

Dodawanie adnotacji tekstowych

ax.annotate(text, xy=(x_point, y_point), xytext=(x_text, y_text), arrowprops=...) dodaje etykietę tekstową z opcjonalną strzałką wskazującą konkretny punkt danych. Funkcji tej można używać do wyróżniania wartości maksymalnych, anomalii lub ważnych zdarzeń na wykresie. Słownik arrowprops steruje stylem strzałki: arrowstyle='->' oznacza prostą strzałkę.

y_vals = np.array([120, 180, 310, 250, 420, 380, 290])
x_vals = np.arange(len(y_vals))
peak_idx = np.argmax(y_vals)

fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x_vals, y_vals, 'o-', color='steelblue')
ax.annotate(f'Peak: {y_vals[peak_idx]}',
            xy=(peak_idx, y_vals[peak_idx]),
            xytext=(peak_idx - 2, y_vals[peak_idx] + 30),
            arrowprops={'arrowstyle': '->', 'color': 'red'},
            fontsize=10, color='red')
plt.close()

Dodawanie poziomych i pionowych linii odniesienia

ax.axhline(y_value) rysuje poziomą linię przez całą szerokość obiektu Axes na określonej wartości y. ax.axvline(x_value) rysuje linię pionową. Obie funkcje przyjmują parametry color, linestyle i linewidth. Linie odniesienia są często używane do oznaczania celów, progów lub dat wydarzeń na wykresach szeregów czasowych.

fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(range(10), np.random.randint(100, 400, 10), 'o-', color='steelblue')

# Target line
ax.axhline(y=250, color='red', linestyle='--', lw=1.5, label='Target')

# Event line
ax.axvline(x=5, color='orange', linestyle=':', lw=1.5, label='Campaign start')

ax.legend()
ax.set_title('Revenue vs Target')
plt.close()

Stylizowanie za pomocą motywów

Matplotlib zawiera kilka wbudowanych arkuszy stylów, które zmieniają ogólny wygląd wszystkich wykresów bez modyfikowania kodu: 'seaborn-v0_8-whitegrid', 'fivethirtyeight', 'ggplot', 'bmh' itd. Styl należy zastosować za pomocą plt.style.use('style_name') na początku skryptu. plt.style.context('style_name') można użyć jako menedżera kontekstu, aby zastosować styl tylko w obrębie danego bloku.

# Apply a style globally
plt.style.use('seaborn-v0_8-whitegrid')
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(range(10), np.random.randn(10).cumsum())
ax.set_title('Seaborn Whitegrid Style')
plt.close()

# Reset to default
plt.rcdefaults()

Zapisywanie wykresów za pomocą savefig()

fig.savefig('filename.png') zapisuje wykres do pliku. Najważniejsze parametry to: dpi (punkty na cal — 150 dla ekranu, 300 do druku), bbox_inches='tight' (zapobiega obcinaniu etykiet) oraz format (wykrywany na podstawie rozszerzenia lub określany jawnie). Typowe formaty to: '.png' (rastrowy, odpowiedni do Internetu), '.pdf' (wektorowy, odpowiedni do druku) i '.svg' (wektorowy, możliwy do edycji w Illustratorze).

fig, ax = plt.subplots(figsize=(8, 5))
ax.plot(range(10), np.random.randn(10), 'o-')
ax.set_title('Export Example')
ax.set_xlabel('Step')
ax.set_ylabel('Value')

# Save as PNG (screen quality)
fig.savefig('/tmp/chart_screen.png', dpi=150, bbox_inches='tight')

# Save as PDF (print quality)
fig.savefig('/tmp/chart_print.pdf', dpi=300, bbox_inches='tight')

plt.close()
print('Figures saved.')

Kompletny przykład: dopracowany wykres do raportu

Oto kompletny przebieg pracy łączący wszystkie techniki z tego rozdziału: dopracowany wykres szeregu czasowego z etykietami osi, sformatowanymi znacznikami osi y, poziomą linią celu, adnotacją przy wartości szczytowej oraz eksportem do pliku PNG w wysokiej rozdzielczości. Jest to schemat, którego użyją Państwo dla każdego wykresu umieszczanego w raporcie lub na pulpicie nawigacyjnym.

from matplotlib.ticker import FuncFormatter

fig, ax = plt.subplots(figsize=(9, 5))
months = list(range(1, 13))
revenue = [120, 145, 132, 160, 175, 190, 210, 185, 220, 200, 240, 260]
peak = max(revenue)
peak_idx = revenue.index(peak)

ax.plot(months, revenue, 'o-', color='steelblue', lw=2, markersize=6)
ax.axhline(y=180, color='red', ls='--', lw=1.2, label='Target: $180K')
ax.annotate(f'Peak ${peak}K', xy=(peak_idx+1, peak),
            xytext=(peak_idx-1.5, peak+15),
            arrowprops={'arrowstyle': '->'}, fontsize=9)
ax.set_xticks(months)
ax.set_xticklabels(['Jan','Feb','Mar','Apr','May','Jun',
                    'Jul','Aug','Sep','Oct','Nov','Dec'], rotation=45, ha='right')
ax.yaxis.set_major_formatter(FuncFormatter(lambda x,p: f'${x:.0f}K'))
ax.set_title('2024 Monthly Revenue vs Target', fontsize=13, fontweight='bold')
ax.set_ylabel('Revenue')
ax.legend()
plt.tight_layout()
plt.close()

Szybkie sprawdzenie

Proszę sprawdzić swoją wiedzę na temat etykiet, tytułów i zapisywania wykresów z tego rozdziału.

Podsumowanie rozdziału

W tym rozdziale dowiedzieli się Państwo, że set_xlabel()/set_ylabel()/set_title() dodają opisowy tekst; FuncFormatter formatuje wartości znaczników jako waluty lub wartości procentowe; ax.annotate() dodaje etykiety tekstowe ze strzałkami w celu wyróżnienia kluczowych punktów danych; axhline()/axvline() rysują linie odniesienia; a fig.savefig() wraz z dpi i bbox_inches='tight' tworzy eksporty jakości publikacyjnej. To kończy kurs Matplotlib Fundamentals — w następnym rozdziale zajmą się Państwo biblioteką Seaborn do tworzenia wykresów statystycznych.

Często zadawane pytania

Czy lekcja „Etykiety, tytuły i zapisywanie wykresów” jest bezpłatna?

Tak — pełny tekst „Etykiety, tytuły i zapisywanie wykresów” 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 „Etykiety, tytuły i zapisywanie wykresów”?

Dodawaj etykiety osi, tytuł, legendę i formatowanie znaczników osi, a następnie zapisuj wykresy o jakości publikacyjnej za pomocą savefig(). Ć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 4 z 4.

Ile czasu zajmuje lekcja „Etykiety, tytuły i zapisywanie wykresów”?

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