2011-08-07 25 views
12

me gustaría trazar datos numéricos con los datos numéricos no, decir algo como esto:Parcela con datos no numéricos en el eje x

import matplotlib.pyplot as pl 
x=['a','b','c','d'] 
y=[1,2,3,4] 
pl.plot(x,y) 

Sin embargo, con los paquetes de la trama matplotlib recibe una advertencia de que los datos no son flotantes (ValueError: literal no válido para float(): a).

En su 'How-to', sugieren poner primero los datos numéricos en el eje xy formatearlos. ¿Hay alguna manera de hacerlo directamente (como se indicó anteriormente)?

Respuesta

13

Utilice la función xticks.

import matplotlib.pyplot as pl 
xticks=['a','b','c','d'] 
x=[1,2,3,4] 
y=[1,2,3,4] 
pl.plot(x,y) 
pl.xticks(x,xticks) 
pl.show() 
+0

¡funciona, gracias! –

12
import matplotlib.pyplot as plt 
x = ['a','b','c','d'] 
y = [1,2,3,4] 
plt.plot(y) 
plt.xticks(range(len(x)), x) 
plt.show() 

enter image description here

En una nota lateral, fechas son numérica en este sentido (es decir, que tienen un orden inherente y el espaciado).

Matplotlib maneja el trazado de datos temporales bastante bien y de manera muy diferente que el ejemplo anterior. Hay an example en el matplotlib examples section, pero se enfoca en mostrar varias cosas diferentes. En general, solo usa plot_date o simplemente grafica los datos y llama al ax.xaxis_date() (o yaxis_date) para decirle a matplotlib que use varios localizadores de fechas y tics.

+0

simplemente pone la etiqueta (trate de ejecutar su código) en el eje x. Me gustaría tener 'a', 'b', 'c', 'd' en el eje x como valores x –

+0

@Max Li - No estaba pensando. Quise poner la parte editada arriba. –

+0

¡Ahora funciona, gracias! –

0

gráficos de barras son mejores en esta situación:

x = ['a','b','c','d'] 
y = [1,2,3,4] 
plt.bar(x,y) 
Cuestiones relacionadas