2011-09-26 23 views
32

Buduję małe narzędzie do analizy danych i doszedłem do punktu, w którym muszę wykreślić przygotowane dane. Kod przed tym tworzy dwie następujące listy o równej długości.Struny matplotlib jako etykiety na osi 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] 

Na tej podstawie chcę zbudować histogram z matplotlib.plt.hist. Jest jednak kilka problemów: 1. t11 [x] i t12 [x] są połączone dla wszystkich x. Gdzie t11 [x] jest w rzeczywistości ciągiem. Reprezentuje pewną kombinację detektorów. Na przykład: "01" mówi, że wykrywanie zostało wykonane w 0 segmencie pierwszego detektora i 1. segmencie drugiego detektora. Moim celem jest posiadanie każdego wpisu z t11 jako oznaczonego punktu na osi X. Pozycja t12 ma określać wysokość paska nad wpisem t11 (na logarytmicznej osi y).

Jak skonfigurować taką oś X? 2. To wszystko jest dla mnie bardzo nowe. Nie mogłem znaleźć niczego powiązanego w dokumentacji. Najprawdopodobniej dlatego, że nie wiedziałem, czego szukać. SO: Czy istnieje "oficjalna" nazwa tego, co próbuję osiągnąć. Pomoże mi też dużo.

Odpowiedz

52

Użyj polecenia 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

Dlaczego użyłeś 'len (t12)' w obu liniach? Czy nie powinno być "len (t11)"? – User

3

W języku matplotlib szukacie sposobu na ustawienie niestandardowych znaczników.

Wygląda na to, że nie można tego osiągnąć za pomocą skrótu pyplot.hist. Będziesz musiał zamiast tego budować obraz krok po kroku. Odpowiedź na pytanie Stack Overflow na pytanie, która jest bardzo podobna do twojej, jest już dostępna i powinna rozpocząć się: Matplotlib - label each bin

11

Dla obiektowego API matplotlib można wykreślić własny tekst na x-ticks wystąpienia axis z następującego kodu:

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

Najpierw trzeba uzyskać dostęp do obiektu osi:

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

następnie :

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