Solucionar que Matplotlib savefig Corte Etiquetas: Guía Completa 2025
Updated on

Si alguna vez has creado una gráfica con Matplotlib que se ve perfecta en el notebook, pero al exportarla con savefig() aparece cortada, recortada o con etiquetas desaparecidas, no eres la única persona.
Este es uno de los problemas más frecuentes de Matplotlib, especialmente cuando usas:
- Etiquetas altas renderizadas con LaTeX
- Títulos de varias líneas
- Etiquetas de ejes giradas o muy largas
- Subplots con espaciado muy ajustado
En esta guía actualizada aprenderás todas las formas fiables de asegurar que tus figuras guardadas siempre incluyan etiquetas, títulos y anotaciones, con buenas prácticas modernas en las que puedes confiar.
🧠 Por Qué Ocurre Esto
Matplotlib no amplía automáticamente el lienzo de la figura cuando las etiquetas se extienden más allá de los ejes.
Las causas habituales incluyen:
- Expresiones estilo LaTeX que generan símbolos altos
- Valores grandes de
fontsize - Etiquetas de ticks largas o rotadas
- Cuadrículas de subplots muy ajustadas
Ejemplo:

import matplotlib.pyplot as plt
plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$', fontsize=50)
plt.title('Example with matplotlib 3.4.2\nLabel clipping example')
plt.show()La etiqueta del eje Y es visible, pero la del eje X a menudo queda cortada en la figura guardada.
✅ 1. Mejor Solución Moderna (Recomendada): Usar constrained_layout=True
Desde Matplotlib 3.6+ (y todavía en 3.8+ en 2025), el método de distribución recomendado es:
fig, ax = plt.subplots(constrained_layout=True)Ejemplo:

fig, ax = plt.subplots(figsize=(7, 5), constrained_layout=True)
ax.set_xlabel("Very long bottom label that usually gets clipped", fontsize=16)
ax.set_ylabel("Tall math label:\n$\\frac{x_a - x_b}{x_c}$")
fig.savefig("figure.png")✔ Ventajas
- Moderno y estable
- Funciona mejor que
tight_layout() - Funciona bien con colorbars, leyendas y subplots
⚠ Inconvenientes
- Un poco más lento en cuadrículas grandes de subplots
Si estás escribiendo código nuevo con Matplotlib en 2025, esta debería ser tu opción por defecto.
✅ 2. Ajustar Márgenes Manualmente con subplots_adjust
Sigue siendo un método sencillo y efectivo:
plt.subplots_adjust(bottom=0.15)O sobre la figura:
plt.gcf().subplots_adjust(bottom=0.18)Aumenta el valor del margen hasta que las etiquetas dejen de solaparse o cortarse.

✅ 3. Usar tight_layout() (Más Antiguo pero Aún Útil)
tight_layout() ajusta automáticamente el relleno:
fig, axes = plt.subplots(ncols=2, nrows=2, figsize=(8, 6))
for ax in axes.flatten():
ax.set_xlabel("Example X label")
ax.set_ylabel("Example Y label")
plt.tight_layout()
plt.show()Notas
- Bueno para gráficas sencillas
- Puede tener problemas con leyendas y colorbars
constrained_layout=Truees ahora la solución preferida
✅ 4. Guardar con bbox_inches="tight" (Muy Buen Arreglo Rápido)
Una solución muy usada para el recorte:
plt.savefig("myfile.png", bbox_inches="tight")Cuándo usarlo
- Arreglo rápido sin modificar el layout
- Asegura que todo lo que aparece en pantalla también aparezca en el archivo

✅ 5. Activar Distribución Automática con rcParams
Si quieres una solución permanente que se aplique a todas las gráficas:

Actualizar rcParams en tiempo de ejecución:
from matplotlib import rcParams
rcParams.update({"figure.autolayout": True})O configurar matplotlibrc:
figure.autolayout : TrueEsto ayuda a garantizar resultados consistentes entre distintas máquinas.
📌 Tabla Resumen: ¿Qué Método Debería Usar?
| Método | Cuándo Usarlo | Mejor Para |
|---|---|---|
constrained_layout=True | **Opción por defecto ** | Layout moderno, subplots, leyendas |
bbox_inches='tight' | Arreglo rápido al guardar | Exportar gráficas individuales |
tight_layout() | Código legado | Cuadrículas simples de subplots |
subplots_adjust() | Quieres control totalmente manual | Ajuste fino para publicaciones |
figure.autolayout=True | Valor por defecto a nivel proyecto | Consistencia entre distintos sistemas |
💡 Consejos Extra para Figuras Perfectas
✔ Usar mayor DPI para reducir problemas con etiquetas largas
plt.savefig("fig.png", dpi=200, bbox_inches="tight")✔ Evitar tamaños de fuente enormes salvo que sean necesarios
Las fuentes muy grandes aumentan la probabilidad de recorte.
✔ Para colorbars: usa constrained_layout
Funciona notablemente mejor que tight_layout.
📊 Crea Visualizaciones sin Ajustar Layout Manualmente (PyGWalker)
Si usas Matplotlib principalmente para visualizar DataFrames, puede que no necesites ajustar layouts manualmente.
Puedes simplemente:
- Cargar tu DataFrame
- Arrastrar y soltar campos
- Generar gráficas al instante
Usando PyGWalker, una herramienta de visualización open-source:
Así se usa:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)O pruébalo online:
| Kaggle | Google Colab | GitHub |
|---|---|---|
![]() | ![]() | ![]() |
❓ Preguntas Frecuentes
-
¿Por qué se cortan mis etiquetas al guardar una figura de Matplotlib?
Porque Matplotlib no amplía automáticamente el lienzo de la figura cuando las etiquetas se extienden más allá de los límites de los ejes. Es algo común con etiquetas LaTeX o texto rotado. -
¿Qué método soluciona el recorte de etiquetas de forma más fiable en 2025?
Usaconstrained_layout=Truepara código moderno, obbox_inches='tight'como arreglo rápido al exportar. -
¿Qué hace
bbox_inches="tight"?
Recalcula la bounding box al guardar, asegurando que se incluyan todos los elementos de texto.



