Hoofdstuk 26 — Exporteren, vector vs raster en publicatie‑kwaliteit figuren
Let op: De tekst is in het Nederlands; alle Python codevoorbeelden zijn in het Engels.
Doel van dit hoofdstuk:
- Begrijpen wanneer je raster (PNG/JPEG) of vector (PDF/SVG) gebruikt.
- DPI, figsize en layout correct instellen voor scherpe, consistente output.
savefig‑opties, transparantie, achtergronden, metadata en fonts beheersen.- Publicatie‑tips voor rapporten, artikelen en presentaties.
Aanbevolen voorkennis: Hoofdstuk 21–25.
26.1 Raster versus vector
- Raster (PNG, JPEG): pixel‑gebaseerd. Voordelen: voorspelbare weergave, goed voor scherm/presentatie; Nadeel: inzoomen geeft pixelatie; tekst is raster.
- Vector (PDF, SVG): schaalbaar zonder kwaliteitsverlies; tekst en lijnen blijven scherp. Nadeel: complexe figuren (miljoenen punten) maken zware bestanden; sommige viewers/renderers verschillen.
- Keuze:
- Scherm/presentatie: PNG (geen compressieartefacten), of SVG als ondersteund.
- Drukwerk/papers: PDF (vector) is vaak vereist.
26.2 Grootte en resolutie: figsize en DPI
Matplotlib meet figuurafmetingen in inches. Pixels = inches * DPI.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6, 4), dpi=150)
ax.plot([0,1],[0,1])
ax.set_title('Voorbeeld')
fig.tight_layout()
fig.savefig('figure-6x4in-150dpi.png', dpi=150, bbox_inches='tight')
Richtlijnen:
- Voor A4 rapport: vaak figuren tussen 4–6 inch breed. Voor twee‑koloms papers: 3.5 inch (enkel kolom) of ~7.2 inch (dubbel kolom).
- DPI 150–200 voor scherm; 300+ voor print. Vectorformaten negeren DPI (behalve embedded rasters binnen de figuur).
26.3 savefig‑opties die je moet kennen
fig.savefig('plot.png', dpi=200, bbox_inches='tight', pad_inches=0.02)
fig.savefig('plot.pdf') # vector
fig.savefig('plot.svg', facecolor='white', transparent=False)
fig.savefig('plot.tiff', dpi=300) # voor sommige publicaties
bbox_inches='tight'voorkomt afgesneden labels/legendes;pad_inchesvoegt marge toe.facecolor/edgecolorvoor achtergrond en rand.transparent=Truemaakt achtergrond transparant (let op leesbaarheid).- Metadata (PDF/SVG):
fig.savefig('plot.pdf', metadata={'Title': 'Mijn figuur', 'Author': 'Team'})
26.4 Achtergrond, transparantie en anti‑aliasing
- Transparante achtergrond (
transparent=True) is handig voor slides over een gekleurde achtergrond. Controleer contrast van tekst/assen. - Anti‑aliasing is standaard aan; lijnen/tekst zijn vloeiend. Voor pixel‑perfecte rasterbeelden kan
antialiased=Falseop specifieke artists.
26.5 Fonts en embedding
- Gebruik een gangbaar font (DejaVu Sans standaard bij Matplotlib). Voor volledige controle: stel rcParams in.
import matplotlib as mpl
mpl.rcParams['font.family'] = 'DejaVu Sans'
mpl.rcParams['pdf.fonttype'] = 42 # Type 42 (TrueType) embedding voor betere compatibiliteit
mpl.rcParams['ps.fonttype'] = 42
mpl.rcParams['svg.fonttype'] = 'none' # bewaar tekst als tekst (niet als paden)
- Sommige tijdschriften eisen specifieke fontinstellingen; test PDF in Acrobat/Preview.
26.6 Rasterization strategie voor zware figuren
Voor figuren met heel veel punten/patches kun je specifieke artists rasterizen in een verder vector‑PDF.
import numpy as np
fig, ax = plt.subplots()
x = np.random.rand(1_000_000); y = np.random.rand(1_000_000)
sc = ax.scatter(x, y, s=1, rasterized=True, alpha=0.5)
fig.savefig('scatter.pdf') # vector PDF met gerasterde scatter‑laag
rasterized=Trueop de artist maakt bestanden kleiner en sneller te renderen.- Gebruik z‑order zodat raster‑laag onder tekst/assen ligt.
26.7 Kleurbeheer en profielen (kort)
- Matplotlib werkt in sRGB. Voor drukwerk kan CMYK vereist zijn; exporteer dan naar PDF en converteer in de publicatietool/drukproces (buiten scope van Matplotlib).
- Zorg voor voldoende contrast; test print‑proef indien mogelijk.
26.8 Layout en marges voor publicatie
- Gebruik
constrained_layout=Trueoftight_layout()maar let op: niet altijd perfect met colorbars/insets. Fine‑tune metsubplots_adjustofgridspec_kw.
fig, ax = plt.subplots(constrained_layout=True, figsize=(6, 4))
# ... plot ...
fig.savefig('pub.png', bbox_inches='tight')
- Houd consistente fontgroottes (titel/labels/ticks) en lijn‑diktes aan; legende zonder rand (
frameon=False) tenzij noodzakelijk.
26.9 Workflowcheck voor publicatie‑kwaliteit
- Bepaal doel en formaat (scherm/print, kolombreedte).
- Stel
figsizeendpi(raster) of gebruik vectorformaat. - Controleer labels, units, leesbaarheid, contrast.
- Minimaliseer chartjunk; zorg voor juiste kleurpalet.
- Exporteer met
bbox_inches='tight', metadata en correcte fontinstellingen. - Open het resultaat in een viewer; zoom in (vector) of bekijk op 100% (raster).
26.10 Praktische voorbeelden
# 1) Slide‑ready PNG
fig, ax = plt.subplots(figsize=(10, 5), dpi=150)
ax.plot(range(10))
fig.savefig('slide.png', dpi=150, bbox_inches='tight')
# 2) Paper‑ready enkelkoloms PDF (~3.5 inch breed)
fig, ax = plt.subplots(figsize=(3.5, 2.2))
ax.plot(range(10))
ax.set_xlabel('x'); ax.set_ylabel('y')
fig.savefig('paper.pdf')
# 3) SVG met transparante achtergrond voor web
fig, ax = plt.subplots(figsize=(6, 4))
ax.scatter(np.linspace(0,1,200), np.linspace(0,1,200)**2, s=8, alpha=0.6)
fig.savefig('web.svg', transparent=True)
26.11 Veelvoorkomende valkuilen
- Afgesneden labels/legendes: gebruik
bbox_inches='tight'en controleertight_layout(). - Wazige afbeeldingen in documenten: verkeerde schaal/DPI. Plaats op 100% of exporteer op doelpixeldimensies.
- Zware vector‑PDF’s door miljoenen punten: rasterize dichte lagen.
- Onverwachte fonts in PDF/SVG: stel fonttype rcParams juist in en test in viewer.
26.12 Samenvatting
- Kies raster of vector passend bij het doel; stel
figsizeen DPI bewust in. - Gebruik
savefig‑opties voor randen, achtergrond, metadata en fonts. - Voor publicatie‑kwaliteit: consistente typografie, contrast, en layout; test de export in de doelflow.