Rotar etiquetas de ticks en Matplotlib

En este tutorial, repasaremos ejemplos sobre cómo rotar el texto del eje o las etiquetas en un diagrama de Matplotlib. Trabajaremos a nivel de figuras y de ejes, con varios métodos.

Introducción

Matplotlib es una de las bibliotecas de visualización de datos más utilizadas en Python. Gran parte de la popularidad de Matplotlib proviene de sus opciones de personalización: puede modificar casi cualquier elemento de su jerarquía de objetos.

En este tutorial, veremos cómo rotar texto/etiquetas de marca en un diagrama de Matplotlib.

Creando una Parcela

Vamos a crear una trama simple primero:

1
2
3
4
5
6
7
8
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)
plt.show()

simple matplotlib plot

Rotar etiquetas de marca del eje X en Matplotlib

Ahora, echemos un vistazo a cómo podemos rotar las etiquetas de marca del eje X aquí. Hay dos formas de hacerlo: cámbielo en el nivel de Figura usando plt.xticks() o cámbielo en un nivel de Ejes usando tick.set_rotation() individualmente, o incluso usando ax. set_xticklabels() y ax.xtick_params().

Comencemos con la primera opción:

1
2
3
4
5
6
7
8
9
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)
plt.xticks(rotation = 45) # Rotates X-Axis Ticks by 45-degrees
plt.show()

Aquí, hemos establecido la “rotación” de “xticks” en 45, lo que significa una inclinación de 45 grados, en sentido contrario a las agujas del reloj:

rotate x-axis label with xticks

Nota: Esta función, como todas las demás aquí, debe llamarse después de plt.plot(), para que las marcas no terminen potencialmente recortadas o extraviadas.

Otra opción sería obtener el objeto ‘Axes’ actual y llamar a ‘ax.set_xticklabels()’ en él. Aquí podemos configurar las etiquetas, así como su rotación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)

ax = plt.gca()
plt.draw()

ax.set_xticklabels(ax.get_xticks(), rotation = 45)

plt.show()

Nota: Para que este enfoque funcione, deberá llamar a plt.draw() antes de acceder o configurar las etiquetas de marca X. Esto se debe a que las etiquetas se rellenan después de dibujar el gráfico; de lo contrario, devolverán valores de texto vacíos.

rotar etiquetas del eje x con xticklabels

Alternativamente, podríamos haber iterado sobre los ticks en la lista ax.get_xticklabels(). Luego, podemos llamar a tick.set_rotation() en cada uno de ellos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)

ax = plt.gca()
plt.draw()

for tick in ax.get_xticklabels():
    tick.set_rotation(45)
plt.show()

Esto también resulta en:

rotar las etiquetas del eje x con set_rotation

Y finalmente, puede usar la función ax.tick_params() y establecer la rotación de etiquetas allí:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)

ax = plt.gca()
ax.tick_params(axis='x', labelrotation = 45)
plt.show()

Esto también resulta en:

rotar las etiquetas del eje x con tick_params

Rotar etiquetas de marca del eje Y en Matplotlib

Se pueden aplicar exactamente los mismos pasos para las etiquetas de marca del eje Y.

En primer lugar, puede cambiarlo en el nivel de figura con plt.yticks(), o en el nivel de ejes usando tick.set_rotation() o manipulando ax.set_yticklabels() y ax. tick_params().

Comencemos con la primera opción:

1
2
3
4
5
6
7
8
9
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)
plt.yticks(rotation = 45)
plt.show()

Igual que la última vez, esto establece la “rotación” de “yticks” en 45 grados:

rotate y axis labels yticks

Ahora, trabajemos directamente con el objeto Axes:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)

ax = plt.gca()
plt.draw()

ax.set_yticklabels(ax.get_yticks(), rotation = 45)

plt.show()

La misma nota se aplica aquí, debe llamar a plt.draw() antes de esta llamada para que funcione correctamente.

rotar y eje etiquetas con yticklabels

Ahora, iteremos sobre la lista de ticks y set_rotation() en cada uno de ellos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)

ax = plt.gca()
plt.draw()

for tick in ax.get_yticklabels():
    tick.set_rotation(45)
plt.show()

Esto también resulta en:

rotar y eje etiquetas con set_rotation

Y finalmente, puede usar la función ax.tick_params() y establecer la rotación de etiquetas allí:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)

plt.plot(x, y)

ax = plt.gca()
ax.tick_params(axis='y', labelrotation = 45)
plt.show()

Esto también resulta en:

rotar y eje etiquetas con tick_params

Rotar fechas para que encajen en Matplotlib

La mayoría de las veces, la razón por la que las personas rotan las marcas en sus diagramas es porque contienen fechas. Las fechas pueden alargarse, e incluso con un conjunto de datos pequeño, comenzarán a superponerse y rápidamente se volverán ilegibles.

Por supuesto, puede rotarlos como lo hicimos antes, por lo general, una inclinación de 45 grados resolverá la mayoría de los problemas, mientras que una inclinación de 90 grados liberará aún más.

Sin embargo, hay otra opción para rotar y fijar fechas en Matplotlib, que es incluso más fácil que los métodos anteriores: fig.autofmt__date().

Esta función se puede usar como fig.autofmt_xdate() o fig.autofmt_ydate() para los dos ejes diferentes.

Veamos cómo podemos usarlo en el Conjunto de datos meteorológicos de Seattle:

1
2
3
4
5
6
7
8
9
import pandas as pd
import matplotlib.pyplot as plt

weather_data = pd.read_csv("seattleWeather.csv")

fig = plt.figure()
plt.plot(weather_data['DATE'], weather_data['PRCP'])
fig.autofmt_xdate()
plt.show()

Esto resulta en:

auto format dates to fit in matplotlib

Conclusión

En este tutorial, hemos repasado varias formas de rotar texto/etiquetas de Axis en un diagrama de Matplotlib, incluida una forma específica de formatear y ajustar fechas.

Si está interesado en Visualización de datos y no sabe por dónde empezar, asegúrese de consultar nuestro paquete de libros en [Visualización de datos en Python](https://gum.co/data-visualization -en-paquete-de-libros-de-python):

Visualización de datos en Python Vuélvase peligroso con la visualización de datos ✅ Garantía de devolución de dinero de 30 días sin preguntas ✅ Principiante a Avanzado ✅ Actualizado periódicamente de forma gratuita (última actualización en abril de 2021) ✅ Actualizado con recursos y guías adicionales

Visualización de datos en Python con Matplotlib y Pandas es un libro diseñado para llevar a los principiantes absolutos a Pandas y Matplotlib, con conocimientos básicos de Python, y permitirles construir una base sólida para el trabajo avanzado con estas bibliotecas, desde gráficos simples. a gráficos 3D animados con botones interactivos.

Sirve como una guía detallada que le enseñará todo lo que necesita saber sobre Pandas y Matplotlib, incluido cómo construir tipos de gráficos que no están integrados en la propia biblioteca.

Visualización de datos en Python, un libro para desarrolladores principiantes e intermedios de Python, lo guía a través de la manipulación de datos simple con Pandas, cubre bibliotecas de trazado centrales como Matplotlib y Seaborn, y le muestra cómo aprovechar las bibliotecas declarativas y experimentales. como Altair. Más específicamente, a lo largo de 11 capítulos, este libro cubre 9 bibliotecas de Python: Pandas, Matplotlib, Seaborn, Bokeh, Altair, Plotly, GGPlot, GeoPandas y VisPy.

Sirve como una guía práctica única para la visualización de datos, en una plétora de herramientas que podría usar en su carrera.