Corregir demasiadas marcas de graduación en Matplotlib

MatplotlibMatplotlibBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Al trabajar con Matplotlib, es común encontrar un comportamiento inesperado de las marcas de graduación, como demasiadas marcas o marcas desordenadas. Esto suele ser causado por pasar una lista de cadenas en lugar de números u objetos datetime, que Matplotlib trata como variables categóricas por defecto. Esta práctica proporcionará instrucciones detalladas sobre cómo solucionar el problema de demasiadas marcas en Matplotlib.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

En ocasiones, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Comprueba el tipo de datos

El primer paso es comprobar el tipo de datos de los valores del eje x. Si es una lista de cadenas, es probable que el comportamiento de las marcas de graduación sea inesperado. Para solucionarlo, necesitamos convertir las cadenas a tipos numéricos. Aquí hay un ejemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]

## plot the data with string tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.set_xlabel('Categories')
plt.show()

En este ejemplo, tenemos una lista de cadenas en el eje x. Cuando representamos los datos, las etiquetas de las marcas de graduación están desordenadas y mal colocadas.

Convertir cadenas a tipos numéricos

Para solucionar el comportamiento de las marcas de graduación, necesitamos convertir las cadenas a tipos numéricos. Aquí hay un ejemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]

## convert strings to floats
x = np.asarray(x, dtype='float')

## plot the data with numeric tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.set_xlabel('Floats')
plt.show()

En este ejemplo, convertimos los valores de cadena a números de punto flotante usando np.asarray(). Cuando representamos los datos nuevamente, las etiquetas de las marcas de graduación son como se esperaba.

Manejar demasiadas marcas de graduación

Si el eje x tiene muchos elementos, todos ellos cadenas, es posible que terminemos con demasiadas marcas de graduación que son ilegibles. En este caso, necesitamos convertir las cadenas a tipos numéricos. Aquí hay un ejemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data with 100 elements
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)

## plot the data with string tick labels
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Categories')
plt.show()

En este ejemplo, tenemos 100 valores de cadena en el eje x, lo que resulta en demasiadas marcas de graduación que son ilegibles.

Para solucionarlo, necesitamos convertir las cadenas a números de punto flotante. Aquí hay un ejemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data with 100 elements
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)

## convert strings to floats
x = np.asarray(x, float)

## plot the data with numeric tick labels
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Floats')
plt.show()

En este ejemplo, convertimos los valores de cadena a números de punto flotante usando np.asarray(). Cuando representamos los datos nuevamente, las etiquetas de las marcas de graduación son como se esperaba.

Manejar marcas de graduación de fechas y horas

Cuando se trabajan con valores de fechas y horas en el eje x, es importante convertir las cadenas a objetos de fechas y horas para obtener los localizadores y formatos de fecha adecuados. Aquí hay un ejemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data with datetime strings
x = ['2021-10-01', '2021-11-02', '2021-12-03', '2021-09-01']
y = [0, 2, 3, 1]

## convert strings to datetime64
x = np.asarray(x, dtype='datetime64[s]')

## plot the data with datetime tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.tick_params(axis='x', labelrotation=90)
plt.show()

En este ejemplo, convertimos los valores de cadena a datetime64 usando np.asarray(). Cuando representamos los datos nuevamente, las etiquetas de las marcas de graduación son como se esperaba.

Resumen

En resumen, cuando se trabaja con Matplotlib, es importante comprobar el tipo de datos de los valores del eje x. Si son cadenas, necesitamos convertirlas a tipos numéricos para corregir el comportamiento inesperado de las marcas de graduación. Si hay demasiadas marcas de graduación, también necesitamos convertir las cadenas a tipos numéricos. Cuando se trabajan con valores de fechas y horas, necesitamos convertir las cadenas a objetos de fechas y horas para obtener los localizadores y formatos de fecha adecuados.