2011-09-26 57 views
32

Estoy construyendo una pequeña herramienta para el análisis de datos y he llegado al punto en el que tengo que trazar los datos preparados. El código anterior produce las siguientes dos listas con la misma longitud.cadenas matplotlib como etiquetas en el eje x

t11 = ['00', '01', '02', '03', '04', '05', '10', '11', '12', '13', '14', '15', '20', '21', '22', '23', '24', '25', '30', '31', '32', '33', '34', '35', '40', '41', '42', '43', '44', '45', '50', '51', '52', '53', '54', '55'] 

t12 = [173, 135, 141, 148, 140, 149, 152, 178, 135, 96, 109, 164, 137, 152, 172, 149, 93, 78, 116, 81, 149, 202, 172, 99, 134, 85, 104, 172, 177, 150, 130, 131, 111, 99, 143, 194] 

Basado en esto, quiero construir un histograma con matplotlib.plt.hist. Sin embargo, hay un par de problemas: 1. t11 [x] y t12 [x] están conectados para todo x. Donde t11 [x] es en realidad una cadena. Representa una cierta combinación de detectores. Por ejemplo: '01' dice que la detección se realizó en el segmento 0 del primer detector y en el primer segmento del segundo detector. Mi objetivo es tener cada entrada de t11 como un punto etiquetado en el eje x. La entrada t12 va a definir la altura de la barra sobre la entrada t11 (en un eje y logarítmico)

¿Cómo se configura dicho eje x? 2. Esto es todo muy nuevo para mí. No pude encontrar nada relacionado en la documentación. Probablemente porque no sabía qué buscar. SO: ¿Hay un nombre "oficial" para lo que estoy tratando de lograr? Esto también me ayudaría mucho.

Respuesta

52

Utilice el comando xticks.

import matplotlib.pyplot as plt 

t11 = ['00', '01', '02', '03', '04', '05', '10', '11', '12', '13', '14', '15', 
     '20', '21', '22', '23', '24', '25', '30', '31', '32', '33', '34', '35', 
     '40', '41', '42', '43', '44', '45', '50', '51', '52', '53', '54', '55'] 

t12 = [173, 135, 141, 148, 140, 149, 152, 178, 135, 96, 109, 164, 137, 152, 
     172, 149, 93, 78, 116, 81, 149, 202, 172, 99, 134, 85, 104, 172, 177, 
     150, 130, 131, 111, 99, 143, 194] 


plt.bar(range(len(t12)), t12, align='center') 
plt.xticks(range(len(t12)), t11, size='small') 
plt.show() 
+2

¿Por qué usó 'len (t12)' en ambas líneas? ¿No debería uno ser 'len (t11)'? – User

3

En matplotlib lingo, usted está buscando una manera de establecer tics personalizados.

Parece que no puede lograr esto con el atajo pyplot.hist. Necesitarás construir tu imagen paso a paso en su lugar. Ya hay una respuesta aquí en Stack Overflow para preguntar cuál es muy similar a la suya y debe comenzar: Matplotlib - label each bin

11

Para la API orientada a objetos de matplotlib uno puede trazar un texto personalizado en el x-ticks de un axis con siguiente código:

x = np.arange(2,10,2) 
y = x.copy() 
x_ticks_labels = ['jan','feb','mar','apr','may'] 

fig, ax = plt.subplots(1,1) 
ax.plot(x,y) 

# Set number of ticks for x-axis 
ax.set_xticks(x) 
# Set ticks labels for x-axis 
ax.set_xticklabels(x_ticks_labels, rotation='vertical', fontsize=18) 

enter image description here

0

primer lugar es necesario tener acceso al objeto ejes:

fig, ax = plt.subplots(1,1) 

luego :

ax.set_yticks([x for x in range(-10,11)]) 
ax.set_yticklabels(['{0:2d}'.format(abs(x)) for x in range(-10, 11)]) 
Cuestiones relacionadas