Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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_inches voegt marge toe.
  • facecolor/edgecolor voor achtergrond en rand. transparent=True maakt 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=False op 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=True op 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=True of tight_layout() maar let op: niet altijd perfect met colorbars/insets. Fine‑tune met subplots_adjust of gridspec_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

  1. Bepaal doel en formaat (scherm/print, kolombreedte).
  2. Stel figsize en dpi (raster) of gebruik vectorformaat.
  3. Controleer labels, units, leesbaarheid, contrast.
  4. Minimaliseer chartjunk; zorg voor juiste kleurpalet.
  5. Exporteer met bbox_inches='tight', metadata en correcte fontinstellingen.
  6. 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 controleer tight_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 figsize en 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.