2011-08-07 13 views
12

chciałbym wykreślić dane liczbowe przeciwko nie danych liczbowych, powiedzieć coś takiego:Działka z danych liczbowych na non-oś X

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

Jednak z pakietami matplotlib działki pojawi się ostrzeżenie, że dane nie są zmienne (ValueError: invalid literal for float(): a).

W swoim 'How-to' sugerują najpierw umieścić dane liczbowe na osi X, a następnie sformatować je. Czy istnieje sposób, aby zrobić to bezpośrednio (jak wyżej)?

Odpowiedz

13

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

to działa, dziękuję! –

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

Na marginesie, daty są liczbowa w tym sensie (czyli mają wrodzoną porządek i odstępy).

Matplotlib radzi sobie z wykreślaniem danych tymczasowych całkiem dobrze i zupełnie inaczej niż w powyższym przykładzie. Jest an example w matplotlib examples section, ale skupia się na pokazywaniu kilku różnych rzeczy. Ogólnie wystarczy użyć albo plot_date albo po prostu wykreślić dane i zadzwonić pod numer ax.xaxis_date() (lub yaxis_date), aby powiedzieć matplotlib, aby używał różnych lokalizatorów dat i znaczników.

+0

po prostu umieszcza etykietę (próby wykonania kodu) w ramach osi x. Chciałbym mieć "a", "b", "c", "d" na osi X jako wartości x –

+0

@Max Li - Nie myślałem. Zamierzałem wstawić edytowaną część powyżej. –

+0

Teraz działa, dzięki! –

0

wykresy słupkowe są lepsze w tej sytuacji:

x = ['a','b','c','d'] 
y = [1,2,3,4] 
plt.bar(x,y) 
Powiązane problemy