Estilos en matplotlib

Lista de estilos de matplotlib

Matplotlib proporciona estilos predefinidos para personalizar la apariencia de los gráficos. Puedes consultar la lista de todos los estilos o temas disponibles importando matplotlib como plt e imprimiendo lo siguiente:

import matplotlib.pyplot as plt

print(plt.style.available)

La consola imprimirá la siguiente lista de nombres de estilos:

['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh',
'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 
'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind',
'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 
'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel',
'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid',
'tableau-colorblind10']

Personalizar los gráficos de matplotlib con estilos

Para establecer un estilo en matplotlib tendrás que utilizar plt.style.use y seleccionar el tema que quieras. Por ejemplo, en el siguiente bloque de código establecemos el tema 'Solarize_Light2'.

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("Solarize_Light2")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo Solarize_Light2 de matplotlib

plt.style.use cambiará el estilo global y se aplicará a todos los gráficos de la sesión.

Estilos temporales o locales

Es importante tener en cuenta que utilizando el código anterior los estilos no solo se aplicarán al gráfico que creas, sino a todos los de la sesión. Si quieres establecer un tema para solo un gráfico o bloque de código tendrás que utilizar with plt.style.context("style_name"): como en el ejemplo siguiente.

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

with plt.style.context("dark_background"):
  
  fig, ax = plt.subplots()
  x = np.linspace(-10, 10, 100)
  
  for i in range(0, 3):
    J = jv(i, x)
    ax.plot(x, J)

# plt.show()

Cambiar el estilo temporal o localmente en matplotlib con plt.style.context

Recuperar el estilo por defecto de matplotlib tras haberlo cambiado

Sin embargo, si ya has establecido un tema y quieres recuperar los ajustes por defecto de matplotlib puedes ejecutar mpl.rcParams.update(mpl.rcParamsDefault) después de haber importando matplotlib como mpl o establecer un tema oculto llamado "default".

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv
import matplotlib as mpl

# Ajustes por defecto
mpl.rcParams.update(mpl.rcParamsDefault)

plt.style.use("ggplot")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Restablecer el estilo por defecto de matplotlib con mpl.rcParamsDefault

Más estilos

En los ejemplos siguientes verás la lista con el resto de estilos disponibles:

_classic_test_patch

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("_classic_test_patch")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo classic test patch de matplotlib

_mpl-gallery

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("_mpl-gallery")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo mpl gallery

_mpl-gallery-nogrid

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("_mpl-gallery-nogrid")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo mpl gallery no grid en matplotlib

bmh

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("bmh")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo bmh en matplotlib

classic

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("classic")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo classic matplotlib

fast

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("fast")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

matplotlib pyplot tema fast

fivethirtyeight

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("fivethirtyeight")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo fivethirtyeight para gráficos de matplotlib

grayscale

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("grayscale")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo grayscale en matplotlib

seaborn

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo seaborn en matplotlib

seaborn-bright

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-bright")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo seaborn bright en Python con matplotlib

seaborn-colorblind

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-colorblind")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo seaborn colorblind

seaborn-dark

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-dark")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo seaborn dark style con plt.style

seaborn-dark-palette

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-dark-palette")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo seaborn dark palette en matplotlib

seaborn-darkgrid

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-darkgrid")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo seaborn-darkgrid

seaborn-deep

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-deep")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Tema seaborn-deep

seaborn-muted

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-deep")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Personalizar un gráfico de matplotlib con el estilo seaborn-muted

seaborn-notebook

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-notebook")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Hoja de estilo seaborn-notebook en Python

seaborn-paper

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-paper")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Establecer el tema seaborn-paper en matplotlib

seaborn-pastel

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-pastel")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Tema seaborn-pastel en Python

seaborn-poster

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-poster")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Tema seaborn-poster

seaborn-talk

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-talk")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo seaborn-tal en matplotlib

seaborn-ticks

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-ticks")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Tema seaborn-ticks

seaborn-white

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-white")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Tema seaborn-white style de matplotlib en Python

seaborn-whitegrid

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("seaborn-whitegrid")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Estilo seaborn-whitegrid en Python

tableau-colorblind10

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("tableau-colorblind10")

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

# plt.show()

Establecer el tema tableau-colorblind10 en matplotlib

Crear tus propios estilos

Es posible crear tus propios estilos o personalizar los ya existentes.

Personalizar un estilo

Considera por ejemplo que te gusta el tema "fivethirtyeight", pero quieres personalizar alguno de sus estilos. En este escenario puedes utilizar rcParams para cambiar los parámetros que quieras, como en el ejemplo siguiente.

Crear tu propio estilo de matplotlib

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv
import matplotlib as mpl

plt.style.use("fivethirtyeight")

mpl.rcParams['font.size'] = 5
mpl.rcParams['grid.color'] = "black"

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

plt.show()

Crear un nuevo estilo

Si quieres crear un nuevo estilo tendrás que crear un archivo .mplstyle. Por ejemplo, puede que quieras crear un estilo llamado mi_estilo con los estilos del siguiente bloque de código y guardarlo dentro de la carpeta estilos dentro de tu directorio de trabajo, e.g. ./estilos/mi_estilo.mplstyle. Recuerda ejecutar mpl.rcParams para obtener una lista de parámetros.

# mystyle.mplstyle

font.size: 5.0,
axes.facecolor: 'lavender',
lines.linewidth : 3
lines.linestyle: '-'
lines.color: 'red'

En este escenario, puedes llamar al estilo con la siguiente línea:

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use("./estilos/mi_estilo.mplstyle")

# Plot
# ...

Ten en cuenta que también puedes pasar un estilo desde una URL.

Alternativamente, puedes guardar tu estilo en mpl_configdir/stylelib. Encontrarás el directorio de esos archivos ejecutando mpl.get_configdir() tras importar matplotlib como mpl. Si los directorios no existen, puede que tengas que crearlos. Luego, podrás llamar a los estilos únicamente con su nombre, e.g. plt.style.use("mi_estilo").

Más temas

Si no quieres crear un tema nuevo y los estilos predefinidos no te gustan encontrarás montones de estilos disponibles en internet. Echa un vistazo a este repositorio de GitHub. Usar uno de estos estilos es muy sencillo, ya que puedes pasar la URL del estilo:

Ejemplo 1

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use('https://github.com/dhaitz/matplotlib-stylesheets/raw/master/pitayasmoothie-light.mplstyle')

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

plt.show()

Utilizar un estilo online de matplotlib

Ejemplo 2

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

plt.style.use('https://github.com/dhaitz/matplotlib-stylesheets/raw/master/pitayasmoothie-dark.mplstyle')

fig, ax = plt.subplots()
x = np.linspace(-10, 10, 100)

for i in range(0, 3):
  J = jv(i, x)
  ax.plot(x, J)

plt.show()

Utilizar un estilo de matplotlib desde una librería de GitHub

Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon

También te puede interesar