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?


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


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

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)

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


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.


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


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

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.