Xticks in einem matplotlib-Plot entfernen?

290

Ich habe ein Semilogx-Diagramm und möchte die xticks entfernen. Ich habe es versucht:

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

Das Gitter verschwindet (ok), aber kleine Häkchen (an der Stelle der Hauptzecken) bleiben übrig. Wie entferne ich sie?

Vincent
quelle
Einige der Lösungen haben bei mir nicht funktioniert. Aber nur eine kleine Änderung der Beispiele hier: ax.set_xticks([], [])und es ist gelöst ...
TravelTrader

Antworten:

464

Die tick_paramsMethode ist sehr nützlich für solche Dinge. Dieser Code deaktiviert große und kleine Häkchen und entfernt die Beschriftungen von der x-Achse.

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()

Geben Sie hier die Bildbeschreibung ein

John Vinyard
quelle
86
Ich weiß zu schätzen, dass dies nicht nur die Frage beantwortet, sondern auch eine Vorlage zum Ein- und Ausschalten mehrerer Dinge bietet. Dies gilt das Ergebnis sowohl für die x- als auch für die y-Achse:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
Steven C. Howell
2
Was ist, wenn es sich um ein 3D-Diagramm handelt?
Tommy.carstensen
38
Dies ist eine großartige Antwort. Für diejenigen, die nach der oo-Version suchen, gilt axesdie gleiche tick_paramsMethode.
Verrückter Physiker
22
In neueren Versionen von matplotlib, sollten Sie ersetzen 'on'mit Trueund 'off'mit False.
BallpointBen
1
Die Antwort sollte für die OOP-Schnittstelle und die neuere Versionssyntax aktualisiert werden.
ifly6
141

Nicht genau das, wonach das OP gefragt hat, aber eine einfache Möglichkeit, alle Achsenlinien, Häkchen und Beschriftungen zu deaktivieren, besteht darin, einfach Folgendes aufzurufen:

plt.axis('off')
Martin Spacek
quelle
25
Was ich brauchte, danke. Die objektorientierte Version würde sich ax.axis('off')auf einer vorhandenen Achseninstanz befinden.
PlasmaBinturong
5
wie für nur xaxis?
qrtLs
82

Alternativ können Sie eine leere Häkchenposition übergeben und als kennzeichnen

# 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
quelle
8
Wenn Sie beispielsweise eine vorhandene Achseninstanz haben, axkönnen Sie Folgendes verwenden:ax.set_xticks([], [])
Guilherme Salomé
@ GuilhermeSalomé Dies löst jetzt eine Warnung aus: "Die Positionsübergabe des Nebenparameters set_xticks () ist seit Matplotlib 3.2 veraltet. Der Parameter wird zwei Nebenversionen später nur noch mit Schlüsselwörtern versehen." Was ist jetzt die richtige Lösung?
Rylan Schaeffer
2
@RylanSchaeffer ax.set_xticks([])für große Zecken, ax.set_xticks([], minor=True)für kleine Zecken. Äquivalente mit pyplotsind plt.xticks([])und plt.xticks([], minor=True).
Anakhand
68

Hier ist eine alternative Lösung, die ich auf der matplotlib-Mailingliste gefunden habe :

import matplotlib.pylab as plt

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

Graph

Tom Phillips
quelle
42

Es gibt eine bessere und einfachere Lösung als die von John Vinyard. Verwendung NullLocator:

import matplotlib.pyplot as plt

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

Hoffentlich hilft das.

dmcdougall
quelle
22
"Besser" ist umstritten, aber +1 für die Alternative.
mechanisches
Eine Variante dieser Lösung funktionierte auch für mich, als das Ziel darin bestand, nur xticks aus einem "vergrößerten" Einschub zu entfernen und sie im Hauptplot zu belassen. Verwenden von axins.xaxis.set_major_locator(plt.NullLocator()), wo axinswird das Objekt zurückgegeben von axins = zoomed_inset_axes()(Funktion importiert von mpl_toolkits.axes_grid1.inset_locator).
Dennis Soemers
28

Versuchen Sie dies, um die Etiketten (aber nicht die Häkchen) zu entfernen:

import matplotlib.pyplot as plt

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

Beispiel

Auraham
quelle
3
setpist im Pylab-Modus, kann nicht gegen einzelne Achsen verwendet werden
schneidig
1
Wie wäre es mit der objektorientierten Schnittstelle?
ifly6
Dies war die einzige Antwort, die für mich auch bei 3D-Plots funktioniert hat. Danke dafür!
Brent
13

Dieses Snippet kann nur beim Entfernen der xticks helfen.

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

Dieses Snippet kann beim Entfernen der beiden xticks und yticks hilfreich sein.

from matplotlib import pyplot as plt    
plt.xticks([]),plt.yticks([])
Amitrajit Bose
quelle
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
quelle
2
Die objektorientierte Version davon istax.tick_params()
Marcelo Villa-Piñeros
1
Auch mit offund onist veraltet. 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

Diejenigen unter Ihnen, die nach einem kurzen Befehl zum Ausschalten aller Häkchen und Beschriftungen suchen, sollten damit einverstanden sein

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

boolDies ermöglicht den Typ für die jeweiligen Parameter, da die Version matplotlib> = 2.1.1 ist

Für benutzerdefinierte Tick-Einstellungen sind die Dokumente hilfreich:

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

hahnec
quelle