Agregar un grid en matplotlib

Agregar una rejilla a un gráfico con la función grid

¿Cómo agregar un grid a un gráfico de matplotlib?

Si quieres mostrar un grid en tu gráfico tan solo tienes que llamar a la función grid de matplotlib después de crear un gráfico.

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grid
ax.grid()

# plt.show()

La función grid de matplotlib pyplot

Grid para el eje X

El grid se agrega por defecto tanto para el eje X como para el Y, pero es posible establecerlo solo para uno de ellos. Por un lado, si quieres agregar un grid a las marcas del eje X puedes establecer el argumento axis como "x".

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grid del eje X
ax.grid(axis = "x")

# plt.show()

Grid para el eje X en Python

Grid para el eje Y

Por otro lado, si quieres mostrar el grid para el eje Y tan solo tienes que establecer el argumento axis como "y".

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grid del eje Y
ax.grid(axis = "y")

# plt.show()

Grid para el eje Y en Python

Grid debajo de los puntos

En los ejemplos anteriores las líneas que conforman el grid se dibujaban por encima de los puntos. Sin embargo, es posible agregarlas por debajo de ellos estableciendo set_axisbelow como True.

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grid
ax.grid()
ax.set_axisbelow(True) # Grid debajo

# plt.show()

Grid debajo de los puntos en Python con matplotlib y set_axisbelow

Grid principal

La función grid proporciona un argumento llamado which. Estableciendo este argumento como "major" todos los estilos se aplicarán solo al grid principal.

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grid principal
ax.grid(which = "major")

# plt.show()

Grid principal (major) en matplotlib

Grid secundario

Si estableces el argumento which como "minor" podrás personalizar los ajustes del grid secundario. Sin embargo, si no llamas a la función minorticks_on el grid secundario no se mostrará.

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grid secundario
ax.grid(which = "minor")
ax.minorticks_on()

# plt.show()

Grid secundario (minor) en matplotlib con minorticks_on

Grid secundario sin marcas en los ejes

En el ejemplo anterior, al utilizar la función minorticks_on, las marcas secundarias de los ejes se mostrarán. Si prefieres no mostrar esas marcas puedes eliminarlas utilizando la siguiente línea de código:

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grid secundario
ax.grid(which = "minor")
ax.minorticks_on()
ax.tick_params(which = "minor", bottom = False, left = False)

# plt.show()

Grid secundario en Python sin marcas en los ejes

Grid principal y secundario a la vez

Estableciendo which como both podrás mostrar tanto el grid principal como el secundario siempre y cuando también llames a la función minorticks_on. Una alternativa es agregar cada grid por separado, lo que te permitirá establecer ajustes de manera independiente para cada grid.

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grid principal y secundario
ax.grid(which = "both")
ax.minorticks_on()
ax.tick_params(which = "minor", bottom = False, left = False)


# Alternativa:
# ax.grid(which = "major")
# ax.grid(which = "minor")
# ax.minorticks_on()

# plt.show()

Grid principal y secundario a la vez en Python

Personalización del grid

Las propiedades del grid se pueden personalizar a través de varios parámetros. Ten en cuenta que puedes aplicar estos estilos para todo el grid o crear varios grids (con axis o which) y aplicar los estilos que quieras para cada uno de ellos.

Color de las líneas

El color por defecto del grid se puede sobrescribir estableciendo un nuevo color con el argumento color.

Color del grid en matplotlib

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grid rojo
ax.grid(color = "red")

# plt.show()

Estilo de línea del grid

El estilo o tipo de línea utilizada para el grid se puede personalizar a través del argumento linestyle o ls. En el siguiente ejemplo agregamos una línea discontinua.

Estilo de línea de un grid en Python

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Tipo de línea del grid
ax.grid(linestyle = "dashed")

# plt.show()

Grosor de las líneas

El grosor de las líneas se puede personalizar tanto para para el grid principal como para el secundario. Si utilizas ambos, lo más habitual es que el grid principal sea más grueso que el secundario. El argumento linewidth o lw se puede utilizar para este propósito.

Grosor de línea del grid en matplitlib

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Grosor del grid
ax.grid(which = "major", linewidth = 1)
ax.grid(which = "minor", linewidth = 0.2)
ax.minorticks_on()

# plt.show()

Transparencia de las líneas

El argumento alpha controla la transparencia de las líneas del grid. Este argumento es muy útil si quieres agregar un grid difuminado que se vea ligeramente.

Transparencia de las líneas del grid en matplotlib pyplot

import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Transparencia del grid
ax.grid(linewidth = 1.5, alpha = 0.25)

# plt.show()

Posición personalizada de las líneas del grid

A veces, al crear un gráfico con un grid quieres personalizar la posición de las líneas del grid. Para ello puedes utilizar FixedLocator y AutoMinorLocator de matplotlib.ticker y las funciones set_[major|minor]_locator. Lo mismo se aplica para el eje Y y para el grid secundario. Sin embargo, también podrías utilizar la función AutoMinorLocator para crear N-1 líneas separadas uniformemente entre el grid principal. Consulta el siguiente ejemplo a modo aclaratorio.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoMinorLocator, FixedLocator

# Datos de ejemplo y gráfico
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]

fig, ax = plt.subplots()
ax.scatter(x, y)

# Ambos grids
ax.grid(which = "major")
ax.grid(which = "minor", alpha = 0.2)

# Posiciones del grid principal para el eje X
ax.xaxis.set_major_locator(FixedLocator([1, 3, 5]))

# Posiciones del grid principal para el eje Y
ax.yaxis.set_major_locator(FixedLocator([2, 4]))

# Grid secundario dividio en 10 partes iguales entre cada grid del eje X
ax.xaxis.set_minor_locator(AutoMinorLocator(10))

# plt.show()

Determina la posición del grid en Python con matplotlib y FixedLocator

Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon

También te puede interesar