Usunąć xticks z wykresu Matplotlib?

290

Mam działkę semilogx i chciałbym usunąć xticks. Próbowałem:

plt.gca().set_xticks([])
plt.xticks([])
ax.set_xticks([])

Siatka znika (ok), ale pozostają małe tiki (w miejscu głównych tików). Jak je usunąć?

Vincent
źródło
Niektóre rozwiązania nie działały dla mnie. Ale tylko mała zmiana przykładów tutaj: ax.set_xticks([], [])i zostało rozwiązane ...
TravelTrader

Odpowiedzi:

464

Ta tick_paramsmetoda jest bardzo przydatna w przypadku takich rzeczy. Ten kod wyłącza znaczniki główne i drobne i usuwa etykiety z osi X.

from matplotlib import pyplot as plt
plt.plot(range(10))
plt.tick_params(
    axis='x',          # changes apply to the x-axis
    which='both',      # both major and minor ticks are affected
    bottom=False,      # ticks along the bottom edge are off
    top=False,         # ticks along the top edge are off
    labelbottom=False) # labels along the bottom edge are off
plt.show()
plt.savefig('plot')
plt.clf()

wprowadź opis zdjęcia tutaj

John Vinyard
źródło
87
Rozumiem, jak to nie tylko odpowiada na pytanie, ale zapewnia szablon do włączania / wyłączania kilku rzeczy. Odnosi się to do obu osi xi y:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
Steven C. Howell,
2
Co jeśli jest to fabuła 3D?
tommy.carstensen
38
To świetna odpowiedź. Dla tych, którzy szukają wersji oo, axesma tę samą tick_paramsmetodę.
Mad Physicist,
22
W nowszych wersjach matplotlib, należy wymienić 'on'z Truei 'off'z False.
BallpointBen
1
Odpowiedź powinna zostać zaktualizowana dla interfejsu OOP i składni nowszej wersji.
ifly6
142

Nie do końca to, o co prosił PO, ale prostym sposobem na wyłączenie wszystkich linii osi, znaczników i etykiet jest po prostu wywołanie:

plt.axis('off')
Martin Spacek
źródło
26
Czego potrzebowałem dzięki. Wersja zorientowana obiektowo byłaby ax.axis('off')na istniejącej instancji osi.
PlasmaBinturong
5
jak tylko xaxis?
qrtLs
82

Alternatywnie możesz podać pustą pozycję zaznaczenia i oznaczyć jako

# for matplotlib.pyplot
# ---------------------
plt.xticks([], [])
# for axis object
# ---------------
# from Anakhand May 5 at 13:08
# for major ticks
ax.set_xticks([])
# for minor ticks
ax.set_xticks([], minor=True)
hashmuke
źródło
8
Jeśli masz istniejącą instancję osi, powiedzmy ax, możesz użyć:ax.set_xticks([], [])
Guilherme Salomé
@ GuilhermeSalomé powoduje to wyświetlenie ostrzeżenia: „Przekazywanie drugorzędnego parametru set_xticks () pozycjonowane jest przestarzałe od Matplotlib 3.2; parametr stanie się tylko dwoma słowami kluczowymi później”. Jakie jest teraz właściwe rozwiązanie?
Rylan Schaeffer
2
@ RylanSchaeffer ax.set_xticks([])dla dużych kleszczy, ax.set_xticks([], minor=True)dla małych kleszczy. Odpowiednikami z pyplotplt.xticks([])i plt.xticks([], minor=True).
Anakhand
68

Oto alternatywne rozwiązanie, które znalazłem na liście mailingowej matplotlib :

import matplotlib.pylab as plt

x = range(1000)
ax = plt.axes()
ax.semilogx(x, x)
ax.xaxis.set_ticks_position('none') 

wykres

Tom Phillips
źródło
42

Jest lepsze i prostsze rozwiązanie niż to podane przez Johna Vinyarda. Użyj NullLocator:

import matplotlib.pyplot as plt

plt.plot(range(10))
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.show()
plt.savefig('plot')

Mam nadzieję, że to pomaga.

dmcdougall
źródło
22
„Lepsze” jest dyskusyjne, ale +1 za alternatywę.
Mechanical_meat
Odmiana tego rozwiązania działała również dla mnie, gdy celem było usunięcie xticków z „powiększonego” wstawki, przy jednoczesnym zachowaniu ich na głównej fabule. Używając axins.xaxis.set_major_locator(plt.NullLocator()), gdzie axinsjest zwracany obiekt axins = zoomed_inset_axes()(funkcja importowana z mpl_toolkits.axes_grid1.inset_locator).
Dennis Soemers,
28

Spróbuj to usunąć etykiety (ale nie kleszcze):

import matplotlib.pyplot as plt

plt.setp( ax.get_xticklabels(), visible=False)

przykład

auraham
źródło
3
setpjest w trybie pylab, nie można go używać w stosunku do poszczególnych osi
przerywany
1
A co z interfejsem obiektowym?
ifly6
To była jedyna odpowiedź, która również działała dla mnie w przypadku wykresów 3D. Dzięki za to!
Brent
13

Ten fragment kodu może pomóc w usunięciu tylko xticks.

from matplotlib import pyplot as plt    
plt.xticks([])

Ten fragment kodu może pomóc usunąć xticks i yticks oba.

from matplotlib import pyplot as plt    
plt.xticks([]),plt.yticks([])
Amitrajit Bose
źródło
3
# remove all the ticks (both axes), and tick labels on the Y axis
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')
Nishant Wattamwar
źródło
2
Wersja zorientowana obiektowo toax.tick_params()
Marcelo Villa-Piñeros,
1
Ponadto używanie offi onjest przestarzałe. MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
Marcelo Villa-Piñeros,
0

Ci z was, którzy szukają krótkiego polecenia, aby wyłączyć wszystkie tiki i etykiety, powinni być w porządku

plt.tick_params(top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=False)

co pozwala na wpisanie bool odpowiednich parametrów od wersji matplotlib> = 2.1.1

W przypadku niestandardowych ustawień zaznaczania pomocne są dokumenty:

https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.tick_params.html

hahnec
źródło