Menu
CoddyTech

Hoja de Trucos de Matplotlib

Última actualización

Figure y axes

Una figure es la imagen completa. Un axes es un gráfico dentro de ella, y casi todas las llamadas de abajo son métodos de ax.

TareaCódigo
Importar pyplotimport matplotlib.pyplot as plt
Una figure con un gráficofig, ax = plt.subplots()
Fijar el tamaño en pulgadasfig, ax = plt.subplots(figsize=(8, 4))
Dibujar en los axesax.plot(x, y)
Mostrar la figureplt.show()
Guardar como PNG nítidofig.savefig("chart.png", dpi=150, bbox_inches="tight")
Guardar como gráfico vectorialfig.savefig("chart.svg"), fig.savefig("chart.pdf")
Fondo transparentefig.savefig("chart.png", transparent=True)
Cerrar una figure para liberar memoriaplt.close(fig)
Estilo pyplot rápido para un gráficoplt.plot(x, y) plt.title("Quick look") plt.show()

Tipos de gráfico

TareaCódigo
Gráfico de líneasax.plot(x, y)
Gráfico de dispersiónax.scatter(x, y, s=20, alpha=0.7)
Dispersión coloreada por valor, con barra de colorpoints = ax.scatter(x, y, c=y, cmap="viridis") fig.colorbar(points, ax=ax)
Gráfico de barrasax.bar(cats, a)
Barras horizontalesax.barh(cats, a)
Barras apiladasax.bar(cats, a, label="2025") ax.bar(cats, b, bottom=a, label="2026")
Barras agrupadaspos = np.arange(len(cats)) ax.bar(pos - 0.2, a, width=0.4) ax.bar(pos + 0.2, b, width=0.4) ax.set_xticks(pos, labels=cats)
Histogramaax.hist(data, bins=30)
Diagrama de cajaax.boxplot([data, data * 2], tick_labels=["A", "B"])
Diagrama de violínax.violinplot([data, data * 2])
Gráfico de tartaax.pie([40, 35, 25], labels=cats, autopct="%1.0f%%")
Banda entre dos curvasax.fill_between(x, y - 0.2, y + 0.2, alpha=0.3)
Barras de errorax.errorbar([1, 2, 3], [4, 5, 3], yerr=[0.5, 0.3, 0.6], fmt="o", capsize=4)
Gráfico escalonadoax.step(x, y, where="mid")
Mapa de calor de un array 2Dimage = ax.imshow(np.random.default_rng(0).random((5, 5)), cmap="magma") fig.colorbar(image, ax=ax)
Gráfico de contornos rellenosX, Y = np.meshgrid(x, x) ax.contourf(X, Y, np.sin(X) * np.cos(Y), levels=20)
Densidad de muchos puntosax.hexbin(data, data + np.random.default_rng(1).normal(size=200), gridsize=20)
Línea de referencia horizontal o verticalax.axhline(0, color="gray", linestyle="--"), ax.axvline(5)
Sombrear un rangoax.axvspan(2, 4, alpha=0.2)

Líneas, marcadores y colores

TareaCódigo
Color, grosor y estilo de líneaax.plot(x, y, color="tab:red", linewidth=2, linestyle="--")
Marcadores en los puntosax.plot(x, y, marker="o", markersize=4)
Cadena de formato cortaax.plot(x, y, "g--o")
Transparenciaax.plot(x, y, alpha=0.5)
Estilos de línea"-", "--", "-.", ":"
Códigos de marcador"o", "s", "^", "x", ".", "*"
Formas de indicar un color"tab:blue", "C1", "#1f77b4", (0.2, 0.4, 0.6)
n colores de un colormapcolors = plt.colormaps["viridis"](np.linspace(0, 1, 5))
Tu propio ciclo de coloresax.set_prop_cycle(color=["#0b7285", "#e8590c", "#5f3dc4"])
Barras con borde y tramadoax.bar(cats, a, color="white", edgecolor="black", hatch="//")

Títulos, etiquetas y leyendas

TareaCódigo
Título y etiquetas de ejesax.set_title("Sales"), ax.set_xlabel("Month"), ax.set_ylabel("EUR")
Todo en una sola llamadaax.set(title="Sales", xlabel="Month", ylabel="EUR")
Leyenda a partir de las etiquetasax.plot(x, y, label="sin") ax.legend()
Posición y columnas de la leyendaax.legend(loc="upper right", ncols=2, frameon=False)
Leyenda fuera del gráficoax.legend(loc="center left", bbox_to_anchor=(1, 0.5))
Texto en una posición de los datosax.text(5, 0.5, "note")
Anotación con flechaax.annotate("peak", xy=(1.57, 1), xytext=(3, 1.2), arrowprops=dict(arrowstyle="->"))
Etiquetas de valor en las barrasbars = ax.bar(cats, a) ax.bar_label(bars)
Título de toda la figurefig.suptitle("Q1 report")
Fórmulas en las etiquetasax.set_xlabel(r"$\alpha$ (rad)")

Ejes, ticks y escalas

TareaCódigo
Límites de los ejesax.set_xlim(0, 10), ax.set_ylim(bottom=0)
Escala logarítmicaax.set_yscale("log")
Elegir ticks y sus etiquetasax.set_xticks([0, 5, 10], labels=["start", "middle", "end"])
Rotar etiquetas de ticksax.tick_params(axis="x", labelrotation=45)
Líneas de cuadrículaax.grid(True, alpha=0.3)
Eje en porcentajefrom matplotlib.ticker import PercentFormatter ax.yaxis.set_major_formatter(PercentFormatter(1.0))
Separador de milesax.yaxis.set_major_formatter("{x:,.0f}")
Ocultar los bordes superior y derechoax.spines[["top", "right"]].set_visible(False)
Segundo eje y a la derechaax2 = ax.twinx() ax2.plot(x, y * 100, color="tab:orange")
Misma escala en ambos ejesax.set_aspect("equal")
Invertir un ejeax.invert_yaxis()
Ocultar los ejes por completoax.axis("off")
Etiquetas de fecha legiblesfig.autofmt_xdate()

Subplots y layout

plt.subplots(rows, cols) devuelve un array de NumPy de axes. Indéxalo como cualquier array.

TareaCódigo
Cuadrícula de gráficosfig, axs = plt.subplots(2, 2, figsize=(8, 6))
Dibujar en uno de ellosaxs[0, 1].plot(x, y)
Recorrerlos todosfor ax in axs.flat: ax.grid(True)
Compartir un eje entre gráficosfig, axs = plt.subplots(1, 3, sharey=True)
Espaciado que evita solapamientosfig, axs = plt.subplots(2, 2, layout="constrained")
Corregir solapamientos después de dibujarfig.tight_layout()
Columnas de distinto anchofig, axs = plt.subplots(1, 2, width_ratios=[3, 1])
Layout con nombres y un panel anchofig, axd = plt.subplot_mosaic([["top", "top"], ["left", "right"]]) axd["top"].plot(x, y)
Gráfico pequeño dentro de otroinset = ax.inset_axes([0.6, 0.6, 0.35, 0.35])
Ocultar un panel vacíoaxs[0].axis("off")

Estilos y valores por defecto

TareaCódigo
Usar un estilo integradoplt.style.use("ggplot")
Listar los estilosplt.style.available
Aspecto de seaborn sin seabornplt.style.use("seaborn-v0_8-whitegrid")
Estilo solo para una figurewith plt.style.context("dark_background"): fig, ax = plt.subplots()
Tamaño de fuente por defectoplt.rcParams["font.size"] = 12
Tamaño y resolución de figure por defectoplt.rcParams["figure.figsize"] = (8, 4), plt.rcParams["figure.dpi"] = 120
Volver a los valores por defectoplt.style.use("default")
Colormaps habituales: secuencial, divergente, gris"viridis", "coolwarm", "Greys"

Gráficos desde pandas

pandas dibuja con Matplotlib. Pasa ax= para dibujar en tus propios axes, o quédate con el ax que devuelve pandas.

TareaCódigo
Columnas de un DataFrame en tus axesdf.plot(x="month", y="sales", ax=ax)
Gráfico de barras de un resumen por grupodf.groupby("city")["sales"].sum().plot.bar(ax=ax)
Seguir dando estilo a lo que dibujó pandasax = df.plot(x="month", y="sales") ax.set_title("Sales")
Columnas directamente a Matplotlibax.plot(df["month"], df["sales"])

Matplotlib 3.11: formas antiguas y qué escribir ahora

El código copiado de tutoriales antiguos puede fallar o lanzar avisos en Matplotlib 3.11. Usa en su lugar las formas de la columna Matplotlib 3.11.

TareaMatplotlib 3.11Forma antigua
Etiquetas del diagrama de cajaax.boxplot([data, data * 2], tick_labels=["A", "B"])labels=["A", "B"]
Diagrama de caja o violín horizontalax.boxplot(data, orientation="horizontal")vert=False
Obtener un colormapplt.colormaps["viridis"]plt.cm.get_cmap("viridis")
Estilo seabornplt.style.use("seaborn-v0_8")plt.style.use("seaborn")

El código de Matplotlib que necesitas para convertir datos en un gráfico claro, ordenado por tarea: figure y axes, tipos de gráfico, líneas y colores, títulos y leyendas, ejes y ticks, subplots y layout, estilos y gráficos desde pandas. Cada fila es un fragmento corto que puedes pegar, con una línea que explica qué hace.

Todo usa el estilo orientado a objetos (fig, ax = plt.subplots() y luego métodos sobre ax) y está escrito para Matplotlib 3.11, la versión que usa Coddy. Las formas antiguas, como labels= en boxplot, solo aparecen en la última tabla, junto a lo que debes escribir en su lugar. Los ejemplos usan x = np.linspace(0, 10, 50), y = np.sin(x) y una muestra de valores normales llamada data. ¿Empiezas con Python? Arranca por la hoja de trucos de Python y ten a mano las hojas de trucos de pandas, NumPy y scikit-learn junto a esta.

Preguntas frecuentes sobre la hoja de trucos de Matplotlib

¿Esta hoja de trucos de Matplotlib es gratis?
Sí. Esta hoja de trucos de Matplotlib es totalmente gratis y no necesitas registrarte. Guárdala en marcadores o imprímela en PDF desde tu navegador, y vuelve cuando necesites la llamada exacta para una leyenda, una cuadrícula de subplots o una barra de color.
¿Cuál es la diferencia entre plt y ax?
plt.plot() dibuja en los axes que estén activos, lo que es rápido para un solo gráfico. fig, ax = plt.subplots() te da la figure y los axes como objetos, así que ax.plot() siempre dibuja justo donde quieres. Usa el estilo ax para cualquier cosa con más de un gráfico y para el código que vayas a conservar.
¿Cómo cambio el tamaño de la figure?
Pasa figsize en pulgadas al crear la figure: fig, ax = plt.subplots(figsize=(10, 5)). Para cambiar el valor por defecto de todas las figures, asigna plt.rcParams["figure.figsize"] = (10, 5). El tamaño en píxeles de un archivo guardado es figsize por dpi.
¿Cómo guardo un gráfico en alta resolución?
Llama a fig.savefig("chart.png", dpi=300, bbox_inches="tight"). Un dpi más alto da un PNG más nítido, y bbox_inches="tight" recorta los márgenes vacíos. Para imprimir o para presentaciones, guarda en SVG o PDF, que se mantienen nítidos a cualquier tamaño.
¿Por qué se solapan los títulos y las etiquetas de mis subplots?
Crea la figure con layout="constrained", como en plt.subplots(2, 2, layout="constrained"), y Matplotlib deja espacio para títulos, etiquetas y barras de color. En una figure que ya existe, llama a fig.tight_layout() después de dibujar.
¿Qué versión de Matplotlib cubre esta hoja de trucos?
Matplotlib 3.11, la versión que usa Coddy. Las llamadas que las versiones nuevas eliminaron o renombraron, como labels= en boxplot (ahora tick_labels=) y plt.cm.get_cmap (ahora plt.colormaps[...]), están en la última tabla junto a lo que debes escribir en su lugar.
¿Puedo ejecutar código de Matplotlib online?
Sí. El playground de Matplotlib, gratuito, ejecuta Python con Matplotlib, NumPy, pandas y scikit-learn en tu navegador y dibuja tus figures junto a la salida, así que puedes pegar cualquier fragmento de esta hoja de trucos y ver el gráfico sin instalar nada. El curso de Machine Learning de Coddy usa estos gráficos para explorar los datos antes de entrenar un modelo.
Ilustración de los lenguajes de programación de Coddy

Aprende Matplotlib con Coddy

COMENZAR