Matplotlib

Programování v GIS 2

Jan Caha

2025-04-28

Matplotlib

Matplotlib

  • v Pythonu v podstatě standard na tvorbu vizualizací a grafů
  • napsáno v Pythonu + optimalizace náročných části v C/C++
  • odděluje 3 hlavní složky
    • interní model grafu
    • API pro programátory
    • vykreslovací backend
  • rozdělení umožňuje snadnou rozšiřitelnost
  • pracuje dobře s numpy i pandas

Komponenty

  • Artist - základní třída, všechno co je vidět se od ní odvozuje
  • Figure - celý obrázek grafu
  • Axes - samotný graf (něco co má osy)
  • jeden Figure může obsahovat vícero Axes - např. dva grafy vedle sebe

Backend

  • interaktivní - třeba pro programy s GUI, nebo i z python skriptů (trochu nešťastné, protože skript se neukončí dokud se obrázek nezavře)
  • statický - tvorba obrázků v různých formátech
  • Qt5Agg, TkAgg, WebAgg Agg, PDF, SVG, PS
import matplotlib

matplotlib.use("Agg")

Stylování a konfigurace

  • buď přímo součást kódu (může být zdlouhavé a opakující se)
  • použití globálního stylu v souboru matplotlibrc - soubor se hledá buď v aktuální projektu nebo v uživatelském adresáři
  • předpřipravené styly
import matplotlib

matplotlib.style.use("ggplot")

Dva způsoby použití

  • submodul matplotlib.pyplot kde pracujeme s jedním grafem
    • všechny volané funkce pak modifikují jeden graf
    • vhodné pro menší skripty a základní ukázky
  • objektový přístup - tvorba Figure a Axes a jejich modifikace
    • vhodné pro komplexnější grafy, či situace kdy tvoříme vícero grafů v rámci skriptu
import matplotlib as mpl

# obrázek s 2 grafy - 1 řádek, 2 sloupce
# velikost obrázku je v palcích
fig, axs = mpl.pyplot.subplots(1, 2, figsize=(16, 8))
  • prvek axs je ve skutečnosti pole, jednotlivých prvků s osami, takže přistupujeme jako axs[0] atd.

Objektový přístup

  • jednotlivé modifikace voláme přímo jako metody prvků Figure a Axes
  • přehlednější a lépe přenositelné
  • metody Axes např. set_xlabel(), set_ylabel(), grid(), legend() či bar(), scatter(), plot()
  • metody Figure např. show(), savefig(), suptitle()

Ukázky

  • galerie na webu projektu obsahuje i kód
  • vyhledávání na githubu pomocí importu knihovny
  • hodně pomůže i Copilot s dobrou specifikací dotazu

Rozšíření

  • existují další knihovny postavené nad Matplotlib
  • obvykle úprava API do nějakého “vhodnějšího” formátu