trazar con texto personalizado para puntos del eje x

106

Estoy dibujando una trama usando matplotlib y python como el código de muestra a continuación.

x = array([0,1,2,3])
y = array([20,21,22,23])
plot(x,y)
show()

Como es el código anterior en el eje x, veré valores dibujados, 0.0, 0.5, 1.0, 1.5es decir, los mismos valores de mis valores x de referencia.

¿Hay alguna forma de asignar cada punto de x a una cadena diferente? Entonces, por ejemplo, quiero que el eje x muestre nombres de meses (cadenas Jun, July,...) u otras cadenas como nombres de personas ( "John", "Arnold", ...) o la hora del reloj ( "12:20", "12:21", "12:22", ..).

¿Sabes qué puedo hacer o qué función tengo que ver?
¿Para mi propósito podría ser matplotlib.tickerde ayuda?

user311906
fuente

Respuestas:

195

Puede configurar manualmente xticks (y yticks) usando pyplot.xticks :

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0,1,2,3])
y = np.array([20,21,22,23])
my_xticks = ['John','Arnold','Mavis','Matt']
plt.xticks(x, my_xticks)
plt.plot(x, y)
plt.show()

unutbu
fuente
44
rotationa veces también es útil:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe
4
¿Y cómo distribuir los elementos de manera uniforme a lo largo del eje x? Digamos que mi eje x tiene 1 millón de puntos internamente y quiero mostrar solo a John, Arnold, Mavis y Matt a lo largo del eje distribuidos uniformemente.
Steve K
@SirBenBenji: Utilice la indexación (por ejemplo x[idx]) para seleccionar solo los datos que desea mostrar.
unutbu
No entiendo por qué escribe pylab, esa respuesta está desactualizada y es incorrecta en mi opinión.
Mario Krenn
1

Esto funcionó para mí. Cada mes en el eje X

str_month_list = ['January','February','March','April','May','June','July','August','September','October','November','December']
ax.set_xticks(range(0,12))
ax.set_xticklabels(str_month_list)
Tajni
fuente