web-dev-qa-db-de.com

Ursprungsachse (x, y) im Matplotlib-Plot anzeigen

Ich habe folgende einfache Darstellung und möchte die Ursprungsachse (x, y) anzeigen. Ich habe bereits ein Raster, aber ich muss die x, y-Achse hervorheben.

enter image description here

das ist mein Code:

x = linspace(0.2,10,100)
plot(x, 1/x)
plot(x, log(x))
axis('equal')
grid()

Ich habe diese Frage gesehen. Die akzeptierte Antwort schlägt vor, "Axis spine" zu verwenden und nur auf ein Beispiel zu verweisen. Das Beispiel ist jedoch zu kompliziert, wenn Untergrundstücke verwendet werden. Ich kann nicht herausfinden, wie ich "Axis spine" in meinem einfachen Beispiel verwende.

30
Martin Vegter

Die Verwendung von subplots ist nicht allzu kompliziert.

Dummer, einfacher Weg:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.2,10,100)
fig, ax = plt.subplots()
ax.plot(x, 1/x)
ax.plot(x, np.log(x))
ax.set_aspect('equal')
ax.grid(True, which='both')

ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')

Und ich bekomme:

with axlines

(Sie können die vertikale Achse nicht sehen, da die untere x-Grenze Null ist.)

Alternative mit einfachen Stacheln

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.2,10,100)
fig, ax = plt.subplots()
ax.plot(x, 1/x)
ax.plot(x, np.log(x))
ax.set_aspect('equal')
ax.grid(True, which='both')

# set the x-spine (see below for more info on `set_position`)
ax.spines['left'].set_position('zero')

# turn off the right spine/ticks
ax.spines['right'].set_color('none')
ax.yaxis.tick_left()

# set the y-spine
ax.spines['bottom'].set_position('zero')

# turn off the top spine/ticks
ax.spines['top'].set_color('none')
ax.xaxis.tick_bottom()

with_spines

Alternative mit seaborn (mein Favorit)

import numpy as np
import matplotlib.pyplot as plt
import seaborn
seaborn.set(style='ticks')

x = np.linspace(0.2,10,100)
fig, ax = plt.subplots()
ax.plot(x, 1/x)
ax.plot(x, np.log(x))
ax.set_aspect('equal')
ax.grid(True, which='both')
seaborn.despine(ax=ax, offset=0) # the important part here

with_seaborn

Mit der Methode set_position Eines Rückgrats

Hier sind die Dokumente für die set_position - Methode der Stacheln :

Die Position der Wirbelsäule wird durch 2 Tupel von (Positionstyp, Betrag) angegeben. Die Positionstypen sind:

  • 'nach außen': Platzieren Sie den Rücken mit der angegebenen Anzahl von Punkten aus dem Datenbereich. (Negative Werte geben die Platzierung der an
    Wirbelsäule nach innen.)

  • 'Achsen': Platzieren Sie die Wirbelsäule an der angegebenen Achsenkoordinate (von 0.0-1.0).

  • 'Daten': Platzieren Sie den Rücken an der angegebenen Datenkoordinate.

Zusätzlich definieren Kurzschreibweisen spezielle Positionen:

  • 'center' -> ('axis', 0.5)
  • 'Null' -> ('Daten', 0.0)

So können Sie die linke Wirbelsäule überall platzieren mit:

ax.spines['left'].set_position((system, poisition))

dabei steht system für 'nach außen', 'Achsen' oder 'Daten' und position an der Stelle in diesem Koordinatensystem.

53
Paul H