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.
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")
💡 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.
- 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)
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.
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.
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)
bbox_inches="tight"
+ layout="constrained"
para margenes limpios.