Aprender a personalizar los estilos de Matplotlib permite dar identidad a tus visualizaciones y mantener coherencia en proyectos desarrollados con Python.
En esta guía verás cómo aplicar estilos predefinidos, ajustar tipografías y fondos mediante rcParams, y crear tus propios temas reutilizables con ayuda de NumPy para generar datos de ejemplo y del paquete cycler para definir paletas consistentes.
8.1 Aplicar estilos predefinidos (plt.style.use)
Matplotlib incluye una colección de estilos listos para usar, como "seaborn-v0_8", "ggplot", "bmh", "fivethirtyeight", "dark_background" o "classic".
import matplotlib.pyplot as plt
import numpy as np
print(plt.style.available) # Lista de estilos disponibles
plt.style.use("seaborn-v0_8") # Aplica estilo global hasta cambiarlo
x = np.linspace(0, 2 * np.pi, 200)
y = np.sin(x)
fig, ax = plt.subplots(layout="constrained")
ax.plot(x, y, label="sin(x)")
ax.set_title("Ejemplo con estilo 'seaborn-v0_8'")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend()
plt.show()
Cambiar estilo temporalmente
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 200)
y = np.sin(x)
with plt.style.context(["dark_background"]):
fig, ax = plt.subplots(layout="constrained")
ax.plot(x, y)
ax.set_title("Solo este gráfico en dark_background")
plt.show()
💡 Podés combinar varios estilos pasando una lista; el último sobreescribe las claves previas.
8.2 Cambiar tipografías y fondos
Las preferencias visuales se controlan de forma global con mpl.rcParams o de manera localizada sobre cada figura y eje.
Ajustes globales con rcParams
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams.update({
"font.family": "DejaVu Sans",
"font.size": 11,
"figure.facecolor": "#FFFFFF",
"axes.facecolor": "#FAFAFA",
"axes.edgecolor": "#333333",
"axes.grid": True,
"grid.linestyle": "--",
"grid.alpha": 0.4,
"axes.titlesize": 13,
"axes.labelsize": 11,
"legend.frameon": False,
})
x = np.linspace(0, 10, 200)
y = np.exp(-0.2 * x) * np.sin(3 * x)
fig, ax = plt.subplots(layout="constrained")
ax.plot(x, y, marker="o", markersize=3)
ax.set_title("Fuente, grilla y fondos personalizados (global)")
ax.set_xlabel("Tiempo")
ax.set_ylabel("Amplitud")
plt.show()
Guardá el archivo en una carpeta reconocida por Matplotlib (por ejemplo, ~/.config/matplotlib/stylelib/ en Linux/macOS o C:\Usuarios\TU_USUARIO\.matplotlib\stylelib\ en Windows).
import matplotlib.pyplot as plt
import numpy as np
plt.style.use("mi_tema") # Si está en stylelib
# plt.style.use("./mi_tema.mplstyle") # Ruta relativa
x = np.linspace(0, 1, 100)
fig, ax = plt.subplots(layout="constrained")
ax.plot(x, x**2, label="x^2")
ax.plot(x, x**3, label="x^3")
ax.set_title("Usando mi_tema.mplstyle")
ax.legend()
plt.show()