14. Exportación y publicación de gráficos

Aprender a exportar correctamente una figura de Matplotlib es clave para presentar resultados con calidad profesional. Este apartado resume formatos, DPI, estilos y buenas prácticas para publicaciones, slides y reportes.

14.1 Guardar en diferentes formatos

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x)

fig, ax = plt.subplots(figsize=(6, 4), layout="constrained")
ax.plot(x, y, label="sin(x)")
ax.set_title("Ejemplo de exportación")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend()

fig.savefig("grafico.png", dpi=200, bbox_inches="tight")
fig.savefig("grafico.pdf", bbox_inches="tight")
fig.savefig("grafico.svg", bbox_inches="tight")
Resultados exportados a PNG/PDF/SVG

💡 PNG es ráster (slide/web), PDF/SVG son vectoriales (artículos e ilustración). Ajustá dpi, bbox_inches, transparent y facecolor según el destino.

14.2 Resolución y DPI

  • Web: 96-150 dpi.
  • Presentaciones: 150-200 dpi.
  • Publicaciones impresas: 300-600 dpi.
fig, ax = plt.subplots(figsize=(6, 4), layout="constrained")
fig.savefig("articulo.png", dpi=300)

14.3 Preparación para artículos y presentaciones

import matplotlib as mpl
from cycler import cycler

mpl.rcParams.update({
    "font.family": "DejaVu Sans",
    "font.size": 10,
    "axes.titlesize": 12,
    "axes.labelsize": 10,
    "legend.fontsize": 9,
    "xtick.labelsize": 9,
    "ytick.labelsize": 9,
    "lines.linewidth": 1.6,
    "lines.markersize": 4.0,
    "axes.grid": True,
    "grid.linestyle": "--",
    "grid.alpha": 0.35,
    "axes.prop_cycle": cycler(color=[
        "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728",
        "#9467bd", "#8c564b", "#e377c2", "#7f7f7f"
    ])
})

mpl.rcParams["pdf.fonttype"] = 42
mpl.rcParams["ps.fonttype"] = 42
mpl.rcParams["svg.fonttype"] = "none"

💡 Mantén jerarquía tipográfica, alto contraste y paletas accesibles. Para LaTeX, activá text.usetex si la revista lo requiere.

14.4 Exportación para slides

fig, ax = plt.subplots(figsize=(10, 5.6), layout="constrained")
fig.savefig("slide.png", dpi=200, transparent=True)

Utilizá figuras 16:9, fuentes grandes (14-18 pt) y líneas gruesas para proyectores.

14.5 PDF multi-página

from matplotlib.backends.backend_pdf import PdfPages
import numpy as np
import matplotlib.pyplot as plt

with PdfPages("reporte.pdf") as pdf:
    for i in range(1, 4):
        fig, ax = plt.subplots(figsize=(6, 4), layout="constrained")
        x = np.linspace(0, 2 * np.pi, 300)
        ax.plot(x, np.sin(i * x))
        ax.set_title(f"Página {i}")
        pdf.savefig(fig, bbox_inches="tight")
        plt.close(fig)

14.6 Checklist de publicación

  • Tamaño y DPI acordes al medio.
  • Formatos vectoriales para texto/líneas nítidas.
  • Tipografías incrustadas y legibles.
  • Colores accesibles; probá escala de grises si aplica.
  • Etiquetas con unidades y límites claros.
  • bbox_inches="tight" + layout="constrained" para margenes limpios.
  • Documentá versiones y estilos para reproducibilidad.