wydruk z niestandardowym tekstem dla punktów osi x


106

Rysuję działkę za pomocą matplotlib i python, jak przykładowy kod poniżej.

x = array([0,1,2,3])
y = array([20,21,22,23])
plot(x,y)
show()

Ponieważ jest to powyższy kod na osi x, zobaczę narysowane wartości, 0.0, 0.5, 1.0, 1.5tj. Te same wartości moich referencyjnych wartości x.

Czy w ogóle istnieje możliwość odwzorowania każdego punktu x na inny ciąg? Na przykład chcę, aby oś x wyświetlała nazwy miesięcy (ciągi Jun, July,...) lub inne ciągi, takie jak nazwiska osób ( "John", "Arnold", ...) lub czas zegara ( "12:20", "12:21", "12:22", ..).

Czy wiesz, co mogę zrobić lub jakiej funkcji się przyjrzeć?
Czy w moim celu może to być matplotlib.tickerpomocne?

Odpowiedzi:


195

Możesz ręcznie ustawić xticks (i yticks) za pomocą pyplot.xticks :

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0,1,2,3])
y = np.array([20,21,22,23])
my_xticks = ['John','Arnold','Mavis','Matt']
plt.xticks(x, my_xticks)
plt.plot(x, y)
plt.show()


44
rotationbywa również przydatny:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe

4
A jak rozłożyć elementy równomiernie wzdłuż osi X? Powiedzmy, że moja oś X ma wewnętrznie 1 milion punktów i chcę wyświetlać tylko John, Arnold, Mavis i Matt wzdłuż osi równomiernie rozłożonych?
Steve K,

@SirBenBenji: Użyj indeksowania (np. x[idx]), Aby wybrać tylko te dane, które chcesz wyświetlić.
unutbu

Nie rozumiem, dlaczego piszesz pylab, że odpowiedź jest moim zdaniem nieaktualna i błędna.
Mario Krenn

1

To zadziałało dla mnie. Co miesiąc na osi X.

str_month_list = ['January','February','March','April','May','June','July','August','September','October','November','December']
ax.set_xticks(range(0,12))
ax.set_xticklabels(str_month_list)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.