Frage Wie kann ich die obere und rechte Achse in Matplotlib entfernen?


Anstelle des standardmäßigen "boxed" Achsenstils möchte ich nur die linke und die untere Achse haben, d. H .:

+------+         |
|      |         |
|      |   --->  |
|      |         |
+------+         +-------

Dies sollte einfach sein, aber ich kann die notwendigen Optionen in den Dokumenten nicht finden.


75
2018-05-29 08:45


Ursprung


Antworten:


Dies ist die vorgeschlagene Matplotlib 2.0-Lösung von der offiziellen Website HIER:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

ax = plt.subplot(111)
ax.plot(x, y)

# Hide the right and top spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')

plt.show()

enter image description here


62
2017-12-08 15:58



Alternativ dazu

def simpleaxis(ax):
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.get_xaxis().tick_bottom()
    ax.get_yaxis().tick_left()

scheint den gleichen Effekt auf einer Achse zu erzielen, ohne die Unterstützung rotierter Etiketten zu verlieren.

(Matplotlib 1.0.1; Lösung inspiriert von Dies).


59
2017-11-04 15:20



[Bearbeiten] Matplotlib jetzt (2013-10) auf Version 1.3.0, die dies beinhaltet

Diese Fähigkeit wurde gerade hinzugefügt, und Sie brauchen die Subversion-Version dafür. Sie können den Beispielcode sehen Hier.

Ich aktualisiere nur um zu sagen, dass es ein besseres gibt Beispiel jetzt online. Immer noch die Subversion-Version, es gab noch keine Veröffentlichung mit dieser.

[Bearbeiten] Matplotlib 0.99.0 RC1 wurde gerade veröffentlicht und enthält diese Fähigkeit.


31
2018-05-29 09:21



Wenn Sie keine Ticks und ähnliches benötigen (z. B. zum Plotten qualitativer Illustrationen), können Sie auch diese schnelle Problemumgehung verwenden:

Machen Sie die Achse unsichtbar (z. B. mit plt.gca().axison = False) und zeichne sie dann manuell mit plt.arrow.


7
2018-05-29 10:06



(Dies ist eher eine Erweiterung Kommentar, zusätzlich zu den umfassenden Antworten hier.)


Beachten Sie, dass wir jedes dieser drei Elemente unabhängig voneinander ausblenden können:

  • Um die Grenze zu verstecken (aka "Wirbelsäule"): ax.set_frame_on(False) oder ax.spines['top'].set_visible(False)

  • Um die Ticks zu verstecken: ax.tick_params(top=False)

  • So blenden Sie die Labels aus: ax.tick_params(labeltop=False)


1
2017-12-27 10:10



Bibliothek Seaborn hat dies mit Funktion despine () eingebaut.

Einfach hinzufügen:

import seaborn as sns

Erstellen Sie jetzt Ihr Diagramm. Und am Ende hinzufügen:

sns.despine()

Wenn Sie sich einige der Standardparameterwerte der Funktion ansehen, werden die obere und rechte Wirbelsäule entfernt und die untere und die linke Wirbelsäule beibehalten:

sns.despine(top=True, right=True, left=False, bottom=False)

Weitere Dokumentationen finden Sie hier: https://seaborn.pydata.org/generated/seaborn.despine.html


0
2017-07-05 07:48



Dies ist viel rudimentärer, könnte aber den Trick bewirken:

remove_border ()


-4
2018-01-11 05:44