HOWTO · Matplotlib
Establecer los valores del eje X en Matplotlib
Este tutorial muestra cómo configurar las marcas del eje X en Matplotlib con la función `matplotlib.pyplot.xticks()`.
En esta página
Usa matplotlib.pyplot.xticks() para elegir dónde aparecen las marcas del eje X y, de forma opcional, qué texto se muestra en esas posiciones. Las posiciones de las marcas indican las coordenadas horizontales; no modifican los datos representados ni establecen el título del eje. Para que el gráfico sea legible, haz que cada etiqueta corresponda a la posición y al punto de datos que describe.
Establecer las posiciones y etiquetas de las marcas del eje X
El primer argumento de xticks() es una secuencia de posiciones. El segundo argumento, que es opcional, proporciona una etiqueta para cada posición. Ambas secuencias deben tener la misma longitud y conservar el mismo orden. El siguiente ejemplo reúne en una figura etiquetas personalizadas, espaciado numérico, una alternativa con posiciones de índice equidistantes y un conjunto reducido de etiquetas de categoría giradas.
import matplotlib.pyplot as plt
x = [1, 2, 5, 9]
y = [3, 5, 4, 8]
labels = ['Jan', 'Feb', 'May', 'Sep']
categories = ['North region', 'South region', 'East region', 'West region', 'Central region']
values = [12, 9, 14, 7, 11]
fig, axes = plt.subplots(2, 2, figsize=(10, 7))
axes[0, 0].plot(x, y, marker='o')
axes[0, 0].set_title('Custom labels')
axes[0, 0].set_xlabel('Month')
axes[0, 0].set_ylabel('Value')
plt.sca(axes[0, 0])
plt.xticks(x, labels)
axes[0, 1].plot(x, y, marker='o')
axes[0, 1].set_title('Numeric spacing')
axes[0, 1].set_xlabel('X value')
axes[0, 1].set_ylabel('Value')
index_positions = list(range(len(x)))
axes[1, 0].plot(index_positions, y, marker='o')
axes[1, 0].set_title('Evenly spaced positions')
axes[1, 0].set_xlabel('Month')
axes[1, 0].set_ylabel('Value')
axes[1, 0].set_xticks(index_positions)
axes[1, 0].set_xticklabels(labels)
axes[1, 1].bar(categories, values)
axes[1, 1].set_title('Fewer, rotated category labels')
axes[1, 1].set_ylabel('Value')
axes[1, 1].set_xticks([0, 2, 4])
axes[1, 1].set_xticklabels(categories[::2])
plt.sca(axes[1, 1])
plt.xticks(rotation=35, ha='right')
fig.tight_layout()
plt.show()
El gráfico superior izquierdo empareja cuatro posiciones con cuatro etiquetas de meses. El gráfico numérico usa los valores x reales, por lo que la distancia entre 2 y 5 es mayor que entre 1 y 2. En cambio, el gráfico inferior izquierdo usa las posiciones de 0 a 3: así, los meses quedan espaciados por igual y cada valor sigue asociado a su mes. El último gráfico coloca cinco barras y muestra etiquetas solo en las posiciones 0, 2 y 4 para reducir la aglomeración; después, las gira y las alinea a la derecha. Las etiquetas de texto visibles en el ejemplo se conservan en inglés. Ejecuta el script en un entorno de Python con Matplotlib instalado; aquí no se incluye una salida capturada.
Gestionar valores de X con espaciado desigual
Un eje numérico representa distancias numéricas. Si tus mediciones corresponden a los valores x 1, 2, 5 y 9, graficarlas con esos valores deja correctamente espacios mayores entre 2 y 5 y entre 5 y 9. Asignar nombres de meses a las marcas no cambia esas coordenadas. Conserva ese espaciado cuando la distancia o el tiempo transcurrido sean relevantes.
Si quieres comparar categorías a intervalos iguales, representa los valores y usando posiciones de índice como range(len(x)) y luego usa los nombres de las categorías como etiquetas de las marcas. La secuencia de datos y las etiquetas deben mantener el mismo orden. Esto cambia la escala horizontal: pasa de representar distancias numéricas a representar el orden de las categorías. Por eso, no conviene hacerlo cuando las diferencias entre las mediciones numéricas tienen significado.
Para etiquetas que representan fechas, usa valores de fecha como datos x y da formato a las marcas de fecha según sea necesario. Asignar nombres de meses a coordenadas numéricas sin relación con fechas no las convierte en fechas.
Controlar la frecuencia de las marcas y mejorar la legibilidad de las etiquetas
En un gráfico pequeño, pasa posiciones explícitas a xticks() para mostrar solo algunas marcas. Por ejemplo, plt.xticks(x[::2]) selecciona valores alternos de una secuencia ordenada. En una escala numérica regular, un localizador puede elegir un intervalo adecuado a medida que cambia la vista. Por ejemplo, importa MultipleLocator desde matplotlib.ticker y llama a ax.xaxis.set_major_locator(MultipleLocator(2)) para solicitar marcas principales cada dos unidades. Elige posiciones explícitas cuando las etiquetas representen categorías con significado y un localizador cuando el eje sea numérico.
Puedes girar las etiquetas largas con plt.xticks(rotation=35, ha='right'); ha establece la alineación horizontal. Si las etiquetas giradas aún se superponen, aumenta el ancho de la figura o reduce la cantidad de marcas. tight_layout() puede dejar más espacio alrededor de los ejes, pero no decide qué marcas son adecuadas.
El ejemplo anterior usa set_xticks en ejes individuales para la mayoría de los paneles y xticks en los ejes actuales para personalizar las etiquetas. Con el estilo orientado a objetos, ax.set_xticks(positions, labels) mantiene la operación asociada a un eje específico. Con pyplot, selecciona primero el eje deseado si la figura contiene varios gráficos.
Preguntas frecuentes: establecer los valores del eje X
¿Puedo establecer las posiciones y las etiquetas en una sola llamada? Sí. Pasa ambas secuencias a plt.xticks(positions, labels) o usa ax.set_xticks(positions, labels). Cada etiqueta se asocia por índice con su posición correspondiente.
¿Cómo muestro menos marcas? Proporciona una lista más corta de posiciones o usa un localizador para marcas numéricas espaciadas regularmente. La frecuencia de las marcas es independiente del número de puntos de datos representados.
¿Puedo usar categorías de texto en el eje X? Sí. Representa directamente los valores de las categorías, como en el gráfico de barras, o usa posiciones de índice numéricas y asigna los nombres de las categorías como etiquetas. La segunda opción es útil cuando necesitas un orden específico o un espaciado uniforme.
¿Qué puedo probar si las etiquetas se superponen? Muestra menos etiquetas, gíralas, alinea a la derecha el texto girado o aumenta el ancho de la figura. Estos cambios afectan a las etiquetas de las marcas, pero no modifican los valores representados.