it-swarm.com.de

Achsentext in Matplotlib-Plots ausblenden

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 Abzug eines Wertes N anpasst und dann N am Ende der Achse hinzufügt.

Dies kann 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 in erster Linie abschaltet (obwohl es in den meisten Fällen nützlich ist, ist es nicht immer!) Ich habe matplotlib.axis.XAxis durchgesehen und kann nichts passendes finden

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

  3. Gibt es eine bessere Möglichkeit, dies trotzdem zu tun? Mein letzter Plot wäre 4x4 Subplots in einer Figur, wenn dies relevant ist.

275
Dave

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

Bei dieser zweiten Option können Sie weiterhin plt.xlabel() und plt.ylabel() verwenden, um den Achsen Beschriftungen hinzuzufügen.

357
Ofri Raviv

Wenn Sie nur den Achsentext unter Beibehaltung der Rasterlinien ausblenden möchten:

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

Durch Ausführen von set_visible(False) oder set_ticks([]) werden auch die Rasterlinien ausgeblendet.

176

Wenn Sie wie ich sind und nicht immer die Achsen abrufen, ax, wenn Sie die Figur zeichnen, dann wäre dies eine einfache Lösung 

plt.xticks([])
plt.yticks([])
84
Ébe Isaac

Etwas von einem alten Thread, aber dies scheint eine schnellere Methode zu sein, die die neueste Version von matplotlib verwendet:

stellen Sie das Hauptformatierungsprogramm für die X-Achse ein

ax.xaxis.set_major_formatter(plt.NullFormatter())
44
Nik Twerdochlib

Ich konnte eigentlich kein Bild ohne Ränder oder Achsendaten darstellen, die auf einem der hier genannten Code-Snippets basieren (selbst auf die Antwort, die angenommen wurde). Nachdem ich mich durch einige API-Dokumentation gekümmert hatte, bin ich auf diesen Code gekommen, um mein Image 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 Aufruf tick_params verwendet, um alle zusätzlichen Informationen, die möglicherweise gerendert werden, grundsätzlich herunterzufahren, und ich habe ein perfektes Diagramm in meiner Ausgabedatei.

21
GingerLoaf

Ein Trick könnte darin bestehen, die Farbe der Häkchenbeschriftung auf Weiß zu setzen, um sie auszublenden.

plt.xticks(color='w')
plt.yticks(color='w')
1
AI_Learning

Bei Verwendung der objektorientierten API verfügt das Axes-Objekt über zwei nützliche Methoden zum Entfernen des Achsentexts: set_xticklabels() und set_xticks() .

Angenommen, Sie erstellen ein Diagramm mit 

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

Wenn Sie nur die Häkchenbeschriftungen entfernen möchten, können Sie verwenden

ax.set_xticklabels([])

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

ax.set_xticks([])

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

1

Ich habe diese Figur farbcodiert, um den Prozess zu erleichtern.

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

 enter image description here

Mit diesen Befehlen haben Sie die volle Kontrolle über die Figur. 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)
1
G M