Achsentext in Matplotlib-Plots ausblenden

370

Ich versuche, eine Figur ohne Häkchen oder Zahlen auf einer der Achsen zu zeichnen (ich verwende Achsen im traditionellen Sinne, nicht die Matplotlib-Nomenklatur!). Ein Problem, auf das ich gestoßen bin, ist, dass matplotlib die x (y) -Ticklabels durch Subtrahieren eines Werts N anpasst und dann N am Ende der Achse addiert.

Dies mag vage sein, aber das folgende vereinfachte Beispiel hebt das Problem hervor, wobei '6.18' der beleidigende Wert von N ist:

import matplotlib.pyplot as plt
import random
prefix = 6.18

rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')

frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
    xlabel_i.set_visible(False)
    xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
    xlabel_i.set_fontsize(0.0)
    xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
    tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
    tick.set_visible(False)

plt.show()

Die drei Dinge, die ich gerne wissen würde, sind:

  1. Wie man dieses Verhalten überhaupt ausschaltet (obwohl es in den meisten Fällen nützlich ist, ist es nicht immer!) Ich habe es durchgesehen matplotlib.axis.XAxisund kann nichts Passendes finden

  2. Wie kann ich N verschwinden lassen (dh X.set_visible(False))

  3. Gibt es überhaupt einen besseren Weg, dies zu tun? Meine endgültige Handlung wäre 4x4-Nebenhandlungen in einer Figur, wenn dies relevant ist.

Dave
quelle
Ich habe ein wenig Zweifel, ob eine der Antworten hier tatsächlich die Frage beantwortet. Für mich sieht es so aus, als würde die Frage fragen, wie man den Offset loswird . Alle Antworten zeigen jedoch verschiedene Möglichkeiten, wie Sie alle Ticklabels entfernen können. Wenn die Frage durch die Antworten ersetzt wurde, sollte man die Frage vielleicht bearbeiten, um zu fragen, wofür die Antworten Lösungen bieten.
ImportanceOfBeingErnest

Antworten:

471

Anstatt jedes Element auszublenden, können Sie die gesamte Achse ausblenden:

frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)

Oder Sie können die Häkchen auf eine leere Liste setzen:

frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])

In dieser zweiten Option können Sie weiterhin Achsen verwenden plt.xlabel()und plt.ylabel()den Achsen Beschriftungen hinzufügen.

Ofri Raviv
quelle
2
Hey Ofri - das ist großartig, danke, aber jetzt (nur um peinlich zu sein) was passiert, wenn ich ein xlabel () hinzufügen möchte? Anders als das manuelle Platzieren eines Text-Widgets.
Dave
5
Wie können Sie dieses Beispiel auf 3D erweitern? ax = plt.gca (Projektion = '3d'), ax.axes.get_zaxis (). set_visible (False) gibt'Axes3DSubplot' object has no attribute 'get_zaxis'
user989762
13
Diese Antwort erlaubt es nicht, Gitterlinien anzuzeigen. Die Antwort von @saullo castro tut jedoch ...
evan54
Das Problem ist, dass, wenn die x_axis auf unsichtbar gesetzt ist, das Raster angezeigt wird :( Bearbeiten: Ich habe gerade die Antwort von @Saullo Castro gesehen, die das Problem behoben hat.
Shailen
1
@ user989762 In Ihrem Fall funktioniert diese Methode nicht einmal get_xaxis().set_visible(False). Ich denke, matplotlib initialisiert in diesem Fall einige Parameter so, als ob das Diagramm 2D wäre. ax.set_zticks([])wird tun, was Sie wollen
kon psych
222

Wenn Sie nur den Achsentext ausblenden möchten, wobei die Gitterlinien beibehalten werden:

frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])

Tun set_visible(False)oder set_ticks([])auch die Rasterlinien auszublenden.

Saullo GP Castro
quelle
4
Dadurch werden die Beschriftungen für alle Unterzeichnungen gelöscht, die diese Achse gemeinsam nutzen: /
Endolith
136

Wenn Sie wie ich sind und axbeim Zeichnen der Figur nicht immer die Achsen abrufen, wäre es eine einfache Lösung

plt.xticks([])
plt.yticks([])
Ébe Isaac
quelle
56

Etwas wie ein alter Thread, aber dies scheint eine schnellere Methode zu sein, wenn die neueste Version von matplotlib verwendet wird:

Stellen Sie den Hauptformatierer für die x-Achse ein

ax.xaxis.set_major_formatter(plt.NullFormatter())
Nik Twerdochlib
quelle
1
Was ist, wenn Sie es nur für einen einzigen Tick tun möchten?
Tommy.carstensen
5
Ja, dies ist nützlich, um nur die Beschriftungen auszublenden, da .set_xticks ([]) auch die Häkchen selbst entfernt.
Zbyszek
49

Ich war nicht in der Lage, ein Bild ohne Rahmen oder Achsendaten basierend auf einem der Code-Schnipsel hier zu rendern (selbst dem, der bei der Antwort akzeptiert wurde). Nachdem ich einige API-Dokumentationen durchgesehen hatte, landete ich auf diesem Code, um mein Bild zu rendern

plt.axis('off')
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)

Ich habe den tick_paramsAufruf verwendet, um zusätzliche Informationen, die möglicherweise gerendert werden, herunterzufahren, und ich habe ein perfektes Diagramm in meiner Ausgabedatei.

GingerLoaf
quelle
1
Wenn Achsen gemeinsam genutzt werden, werden Lösungen, die auf set_ticklabels basieren, auf gemeinsam genutzten Achsen weitergegeben. Nur diese auf tick_params basierende Lösung funktionierte für mich einwandfrei.
Christian O'Reilly
39

Ich habe diese Figur farbcodiert, um den Vorgang zu vereinfachen.

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)

Geben Sie hier die Bildbeschreibung ein

Mit diesen Befehlen können Sie die Figur vollständig steuern. Um die Antwort zu vervollständigen, habe ich auch die Kontrolle über die Splines hinzugefügt:

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# X AXIS -BORDER
ax.spines['bottom'].set_visible(False)
# BLUE
ax.set_xticklabels([])
# RED
ax.set_xticks([])
# RED AND BLUE TOGETHER
ax.axes.get_xaxis().set_visible(False)

# Y AXIS -BORDER
ax.spines['left'].set_visible(False)
# YELLOW
ax.set_yticklabels([])
# GREEN
ax.set_yticks([])
# YELLOW AND GREEN TOGHETHER
ax.axes.get_yaxis().set_visible(False)
GM
quelle
ax.set_xticklabels([])und ax.set_xticks([])arbeitete nicht für mich, aber ax.axes.get_xaxis().set_visible(False)tat.
Homero Esmeraldo
2
Dies sollte die akzeptierte Antwort sein
Jason S
6

Bei Verwendung der objektorientierten API verfügt das AxesObjekt über zwei nützliche Methoden zum Entfernen des Achsentextes set_xticklabels()und set_xticks().

Angenommen, Sie erstellen ein Diagramm mit

fig, ax = plt.subplots(1)
ax.plot(x, y)

Wenn Sie einfach die Häkchen entfernen möchten, können Sie verwenden

ax.set_xticklabels([])

oder um die Zecken vollständig zu entfernen, können Sie verwenden

ax.set_xticks([])

Diese Methoden sind nützlich, um genau anzugeben, wo die Häkchen angezeigt werden sollen und wie sie beschriftet werden sollen. Das Übergeben einer leeren Liste führt zu keinen Häkchen bzw. Beschriftungen.

Steven C. Howell
quelle
2

Ein Trick könnte darin bestehen, die Farbe von Häkchen als weiß festzulegen, um sie auszublenden!

plt.xticks(color='w')
plt.yticks(color='w')
Venkatachalam
quelle