2011-09-26 13 views
32

Sto costruendo un piccolo strumento per l'analisi dei dati e sono giunto al punto, dove devo tracciare i dati preparati. Il codice prima produce i seguenti due elenchi con uguale lunghezza.stringhe matplotlib come etichette sull'asse 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] 

Sulla base di questo, voglio creare un istogramma con matplotlib.plt.hist. Tuttavia, ci sono un paio di problemi: 1. t11 [x] e t12 [x] sono collegati per tutti x. Dove t11 [x] è in realtà una stringa. Rappresenta una determinata combinazione di rivelatori. Ad esempio: '01' indica che il rilevamento è stato effettuato nel segmento 0 del primo rivelatore e nel 1o segmento del secondo rivelatore. Il mio obiettivo è avere ciascuna voce da t11 come un punto etichettato sull'asse x. La voce t12 definirà l'altezza della barra sopra la voce t11 (su un asse logaritmico)

Come si configura un asse x simile? 2. Questo è tutto molto nuovo per me. Non ho trovato nulla correlato nella documentazione. Molto probabilmente perché non sapevo cosa cercare. SO: C'è un nome "ufficiale" per quello che sto cercando di ottenere. Questo mi aiuterebbe anche molto.

risposta

52

Utilizzare il 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

Perché hai usato 'len (t12)' in entrambe le righe? Non dovremmo essere 'len (t11)'? – User

3

Nel gergo di matplotlib, si sta cercando un modo per impostare i segni di graduazione personalizzati.

Sembra che non è possibile ottenere questo con il collegamento pyplot.hist. Dovrai invece costruire la tua immagine passo dopo passo. C'è già una risposta qui su Stack Overflow alla domanda che è molto simile alla tua e dovrebbe iniziare: Matplotlib - label each bin

11

Per l'oggetto orientato API di matplotlib si può tracciare il testo personalizzato sul x-ticks di un axis con seguente codice:

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

primo luogo è necessario accedere all'oggetto assi:

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

quindi :

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