Matplotlib i Seaborn: Vodič za vizualizaciju podataka u Pythonu (2026)
Praktični vodič kroz Matplotlib 3.10 i Seaborn 0.13: statistički grafovi, seaborn.objects API, petroff10 paleta i integracija s Pandas DataFrame-ovima.
Matplotlib i Seaborn su i dalje najkorištenije Python knjižnice za vizualizaciju podataka u 2026. godini. Matplotlib pruža potpunu kontrolu nad svakim pikselom grafikona, a Seaborn dodaje visokorazinsko sučelje za statističke prikaze u nekoliko linija koda. U ovom vodiču pokazujem kako ih zajedno koristiti s Pandas DataFrame-ovima, kako primijeniti novu petroff10 paletu iz Matplotliba 3.10 i kako raditi s novim seaborn.objects deklarativnim API-jem. Sve s pokretljivim primjerima koje možete odmah isprobati u Jupyter Notebooku.
Matplotlib 3.10 (prosinac 2024.) uvodi paletu petroff10 optimiziranu za osobe s daltonizmom te divergentne kolormape berlin, managua i vanimo.
Seaborn 0.13 donosi zreo seaborn.objects API inspiriran gramatikom grafika (ggplot2), sloj po sloj, deklarativno.
Za većinu statističkih analiza dovoljno je 5–10 Seaborn funkcija: relplot, displot, catplot, heatmap, pairplot.
Objektno sučelje (fig, ax = plt.subplots()) je preporučeni obrazac. Izbjegavajte globalni plt.plot u produkcijskom kodu.
Za interaktivne dashboard-e i web dijeljenje kombinirajte Matplotlib/Seaborn s Plotly Express-om ili Streamlit-om.
Uvijek postavite figsize, dpi i eksplicitne oznake osi prije spremanja. Grafovi za članke trebaju barem 150 DPI.
Zašto koristiti Matplotlib i Seaborn u 2026.
Iako ekosustav Python vizualizacije danas broji desetke alternativa (Plotly, Bokeh, Altair, Holoviews, Plotnine), Matplotlib ostaje temelj gotovo svake analize podataka jer se svaka druga knjižnica na njega oslanja ili s njim interoperira. Seaborn je zapravo tanki sloj iznad Matplotliba: kad pozovete sns.scatterplot(), iza scene se stvara isti matplotlib.axes.Axes objekt koji možete dalje uređivati. Ta kombinacija, visokorazinski API za brz rezultat plus mogućnost pikselske kontrole, čini par idealnim za istraživačku analizu, znanstvene publikacije i statička izvješća.
U 2026. godini situacija je ovakva: Matplotlib je u verziji 3.10.x (prva izdana 13. prosinca 2024.), a Seaborn je stabilan na 0.13.2. Matplotlib 3.10 donosi preliminarnu podršku za free-threaded CPython 3.13 (PEP 703), novu paletu petroff10 algoritamski optimiziranu za daltonizam te tri nove divergentne kolormape. Seaborn 0.13 je stabilizirao seaborn.objects API, koji uvodi kompozicijski model sličan R-ovom ggplot2. Za interaktivne dashboard-e i dijeljenje putem preglednika i dalje se preporučuje kombinacija s Plotly Express, ali za publikacijske slike i statistiku Matplotlib i Seaborn nemaju ozbiljne konkurente.
Instalacija i priprema podataka
Prije nego što nacrtamo prvi graf, instalirajmo knjižnice i pripremimo poznati skup podataka. Preporučam korištenje virtualnog okruženja (venv ili uv), jer NumPy i Matplotlib imaju česta ABI ažuriranja. Osobno sam se opekao jednom prilikom kad sam nadogradio NumPy globalno i razbio tri projekta odjednom, pa otad sve živi u venv-u.
Kao primjer koristit ću ugrađeni penguins skup podataka iz Seaborna, 344 opažanja tri vrste pingvina s otoka Palmer. Prednost mu je što ima kombinaciju numeričkih i kategoričkih varijabli te par nedostajućih vrijednosti, savršeno za realistične primjere.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# Učitavanje ugrađenog skupa
penguins = sns.load_dataset("penguins")
print(penguins.head())
print(penguins.shape) # (344, 7)
print(penguins.dtypes)
# Uklanjanje redova s nedostajućim vrijednostima (za jednostavnost primjera)
penguins = penguins.dropna()
Ako se pitate kako sustavno rukovati nedostajućim vrijednostima prije vizualizacije, pogledajte naš vodič o rukovanju nedostajućim vrijednostima s Pandas fillna i dropna. Čist skup podataka je preduvjet za smislen graf, i to sam naučio na teži način na prvom projektu s realnim podacima.
Matplotlib 3.10: arhitektura i osnovni grafovi
Ključna razlika između početničkog i profesionalnog Matplotlib koda leži u pristupu Figure/Axes objektima. Matplotlib nudi dvije razine sučelja: proceduralni pyplot API (imitira MATLAB) i objektno orijentirani API koji radi izravno s figurom i njezinim osima. U produkcijskim skriptama i notebook-ovima za dijeljenje uvijek koristite objektni pristup jer eliminira ovisnost o globalnom stanju.
# Preporučeni objektni obrazac
fig, ax = plt.subplots(figsize=(9, 5), dpi=120)
ax.scatter(
penguins["flipper_length_mm"],
penguins["body_mass_g"],
c="#3366cc",
alpha=0.7,
edgecolor="white",
)
ax.set_xlabel("Duljina peraje (mm)")
ax.set_ylabel("Tjelesna masa (g)")
ax.set_title("Odnos duljine peraje i tjelesne mase kod pingvina")
ax.grid(True, linestyle="--", alpha=0.4)
fig.tight_layout()
plt.show()
Za nekoliko panela na jednoj slici koristimo subplots s više redaka i stupaca. Ovaj obrazac je iznimno koristan pri usporedbi distribucija ili vremenskih presjeka:
fig, axes = plt.subplots(1, 2, figsize=(12, 4.5), sharey=True)
axes[0].hist(penguins["body_mass_g"], bins=25, color="#4c78a8", edgecolor="white")
axes[0].set_title("Distribucija tjelesne mase")
axes[0].set_xlabel("Masa (g)")
axes[1].boxplot(
[penguins.loc[penguins["species"] == s, "body_mass_g"] for s in penguins["species"].unique()],
labels=penguins["species"].unique(),
)
axes[1].set_title("Masa po vrsti")
fig.suptitle("Analiza mase pingvina", fontsize=14)
fig.tight_layout()
Matplotlib 3.10 donosi vrijedan mali novum: paletu petroff10 koja je konstruirana kombinacijom algoritma za modeliranje daltonizma i modela strojnog učenja treniranog na crowdsourced ispitivanju estetike. Aktivirate je jednom linijom:
plt.style.use("petroff10")
# Sada svi grafovi koriste 10 boja pristupačnih za sve tri glavne vrste daltonizma
Seaborn 0.13: statistička vizualizacija u nekoliko linija
Iskreno, ako pišete više od pet linija Matplotlib koda za jedan statistički graf, vjerojatno postoji Seaborn funkcija koja to radi u jednoj. Seaborn 0.13 organizira svoj API oko tri "figure-level" funkcije: relplot za odnose među varijablama, displot za distribucije i catplot za kategoričke usporedbe. Svaka od njih automatski upravlja bojama, legendama, malim panelima (facet grid) i legendama grupa, što bi u čistom Matplotlibu tražilo desetke linija.
import seaborn as sns
sns.set_theme(style="whitegrid", context="notebook")
# Odnos + boja po vrsti + oblik po spolu u jednoj liniji
g = sns.relplot(
data=penguins,
x="flipper_length_mm",
y="body_mass_g",
hue="species",
style="sex",
size="bill_length_mm",
sizes=(30, 200),
alpha=0.8,
height=5,
aspect=1.4,
)
g.set_axis_labels("Duljina peraje (mm)", "Tjelesna masa (g)")
g.figure.suptitle("Morfometrija pingvina", y=1.02)
Za distribucije, displot vraća KDE, histogram, ECDF ili rug plot kroz isti API. Samo mijenjate kind:
Modul seaborn.objects, stabilan od verzije 0.12 i dozreliji u 0.13, uvodi kompozicijsku sintaksu inspiriranu ggplot2 gramatikom grafika. Grafikon konstruirate slaganjem slojeva: podaci, mark, statistička transformacija, skala. Rezultat je čitljiv i lako uređiv kod:
import seaborn.objects as so
(
so.Plot(penguins, x="flipper_length_mm", y="body_mass_g", color="species")
.add(so.Dot(alpha=0.7), so.Jitter(width=0.5))
.add(so.Line(), so.PolyFit(order=1))
.scale(color="deep")
.label(
x="Duljina peraje (mm)",
y="Tjelesna masa (g)",
title="Linearna prilagodba po vrsti pingvina",
)
.layout(size=(8, 5))
)
Prednost objektnog API-ja je jednoličnost: bilo koji dodatak (transformacija, oznaka, skala) je metoda na istom Plot objektu, pa je jednostavno dodati sloj s regresijom, prosjekom po grupi ili greškom bez učenja novog imena funkcije. Detaljnu specifikaciju modela pogledajte u službenoj Seaborn dokumentaciji za objects sučelje.
Heatmape i korelacijske matrice
Heatmap je jedan od najkorisnijih grafova pri istraživanju odnosa među varijablama, jer jedan pogled otkriva sve parne korelacije. Seaborn heatmap radi izravno s Pandas DataFrame-ovima:
Pandas ima ugrađen .plot() pristupnik koji poziva Matplotlib ispod haube. Savršen za brzo istraživanje, bez pisanja bilo koje dodatne vizualizacijske knjižnice. Ovo je idealno kad grupirate podatke prema kategoriji ili vremenu i želite odmah vidjeti oblik:
# Prosjek mase po vrsti i spolu
(
penguins.groupby(["species", "sex"])["body_mass_g"]
.mean()
.unstack("sex")
.plot(kind="bar", figsize=(8, 4.5), rot=0, edgecolor="white")
)
plt.ylabel("Prosječna masa (g)")
plt.title("Prosječna tjelesna masa po vrsti i spolu")
plt.tight_layout()
Ako često agregirate podatke prije vizualizacije, obavezno savladajte pandas GroupBy grupiranje i agregaciju. Otprilike 80% grafova u praksi je zapravo rezultat neke agregacije. Za vremenske serije kombinacija resample + .plot() je nezamjenjiva, o čemu pišemo u vodiču o radu s vremenskim serijama u Pandasu.
Konzistentan izgled grafova u cijelom projektu postižete kroz Matplotlib stilove (globalno) ili Seaborn teme (viši nivo). Seaborn nudi pet ugrađenih tema: darkgrid, whitegrid, dark, white i ticks. Za publikacijske grafove preporučam whitegrid u kombinaciji s kontekstom paper, koji povećava tipografiju za tisak:
Za pristupačne kategoričke palete, uz petroff10 iz Matplotliba 3.10, dobri su izbori Seabornove palete colorblind i Set2. Kad prikazujete više od 8 kategorija na jednom grafu, razmislite o preuređivanju podataka, jer više od 8 boja ljudsko oko teško razlikuje bez obzira na kvalitetu palete. Službene napomene za Matplotlib 3.10 sadrže detaljnu tehničku pozadinu petroff10 dizajna.
Nakon što svladate osnove, prirodno pitanje glasi: koji alat za koji zadatak? Sljedeća tablica sažima praktične kriterije koje sam prikupio kroz stotine izvještaja u produkciji.
Kriterij
Matplotlib 3.10
Seaborn 0.13
Plotly 5.x
Tip izlaza
Statička slika (PNG/SVG/PDF)
Statička slika (radi iznad Matplotliba)
Interaktivni HTML/JavaScript
Brzina razvoja
Sporija (nižerazinski API)
Brza (5–10 linija za većinu grafova)
Brza s Plotly Expressom
Statistički grafovi
Ručno (regresije, KDE)
Ugrađeni: violin, kdeplot, regplot
Ograničeni bez dodatnih paketa
Pikselska kontrola
Potpuna
Djelomična (kroz Axes objekt)
Ograničena (JSON konfiguracija)
Interaktivnost
Nema (bez dodatnih backend-ova)
Nema
Ugrađena: hover, zoom, pan
Publikacijska kvaliteta
Izvrsna (znanstveni časopisi)
Izvrsna
Ograničena za tisak
Veličina izlaza
Vrlo mala (KB)
Vrlo mala (KB)
Velika (100 KB+ HTML)
Krivulja učenja
Strma
Blaga
Blaga
Praktično pravilo koje slijedim: Seaborn za istraživačku analizu (brzo, statistički bogato), Matplotlib za završno uređivanje (kad trebate pomaknuti oznaku za dva piksela ili dodati anotaciju sa strelicom), Plotly za dashboarde i interaktivna izvješća koja korisnik pregledava u pregledniku. Za veće analitičke aplikacije koje traže interaktivnost plus performanse, razmislite o kombinaciji s DuckDB analitičkim upitima u Pythonu koji efikasno pripremaju milijarde redova prije prosljeđivanja u vizualizacijski sloj.
Spremanje i izvoz grafova
Spremanje visokorezolucijskih grafova je područje gdje najviše ljudi izgubi kvalitetu. Za članke, prezentacije i tisak preporučam SVG (vektor, oštar na svakoj rezoluciji) ili PNG s barem 300 DPI. Uvijek eksplicitno navedite bbox_inches="tight" da izbjegnete odsjecanje oznaka:
fig, ax = plt.subplots(figsize=(8, 5), dpi=150)
sns.scatterplot(data=penguins, x="flipper_length_mm", y="body_mass_g", hue="species", ax=ax)
ax.set_title("Odnos duljine peraje i mase")
# Za tisak / časopise
fig.savefig("morfometrija.pdf", bbox_inches="tight")
fig.savefig("morfometrija.svg", bbox_inches="tight")
# Za web
fig.savefig("morfometrija.png", dpi=200, bbox_inches="tight", facecolor="white")
Za automatizirane pipeline-ove izvještavanja (npr. u Airflow-u ili Prefect-u) koristite non-interactive backend Agg koji ne zahtijeva GUI:
import matplotlib
matplotlib.use("Agg") # mora biti prije import pyplot
import matplotlib.pyplot as plt
Često postavljana pitanja
Koja je razlika između Matplotliba i Seaborna?
Matplotlib je nižerazinski, imperativni API koji daje potpunu kontrolu nad svakim elementom grafikona. Seaborn je viši sloj iznad Matplotliba usmjeren na statističku vizualizaciju, gdje jedna linija koda daje ono za što bi u čistom Matplotlibu trebalo 20 linija. U praksi ih koristite zajedno: Seaborn crta, a Matplotlib finalizira.
Kada koristiti Seaborn umjesto Matplotliba?
Uvijek kad radite statističku vizualizaciju s Pandas DataFrame-ovima: box plot, violin, KDE, regresija, pair plot, heatmap. Ako trebate custom animaciju, 3D graf ili pikselsku kontrolu izgleda, prijeđite na Matplotlib.
Kako spremiti Matplotlib graf u visokoj rezoluciji?
Koristite fig.savefig("naziv.png", dpi=300, bbox_inches="tight"). Za publikacije preporučuje se vektorski format SVG ili PDF, koji su oštri na svakoj rezoluciji i imaju manju veličinu datoteke od 300 DPI PNG-a.
Kako napraviti heatmap u Pythonu?
Najjednostavniji način je sns.heatmap(df.corr(), annot=True, cmap="vlag", center=0). Za korelacijske matrice preferirajte divergentne mape (vlag, coolwarm, nova berlin iz Matplotliba 3.10), a za sekvencijalne podatke perceptualno uniformnu viridis.
Koja je najbolja Python knjižnica za vizualizaciju podataka u 2026?
Nema jedne "najbolje", jer ovisi o kontekstu. Za statičku statističku analizu: Matplotlib i Seaborn. Za interaktivne web dashboarde: Plotly Express ili Bokeh. Za deklarativni pristup: Altair. Većina timova u praksi koristi kombinaciju, Seaborn za istraživanje i Plotly za dijeljenje.
Podržava li Matplotlib 3.10 Python 3.13 free-threaded način?
Da, ali samo preliminarno. Matplotlib 3.10 podržava free-threaded build CPython 3.13 (PEP 703) za korištenje unutar jedne dretve. Rad s jednim Figure objektom iz više dretvi i dalje nije preporučljiv jer globalno stanje (npr. pyplot) nije thread-safe.
Praktični vodič kroz MLflow 3 u Pythonu: instalacija tracking servera, autologging za sklearn i XGBoost, Model Registry s aliasima i posluživanje modela u produkciji uz konkretne primjere koda.