Beschriftung der y-Achse von matplotlib auf der rechten Seite


80

Gibt es eine einfache Möglichkeit, die Beschriftung der y-Achse auf der rechten Seite des Diagramms anzubringen? Ich weiß, dass dies für die Tick-Beschriftungen mit möglich ist ax.yaxis.tick_right(), aber ich würde gerne wissen, ob dies auch für die Achsenbeschriftung möglich ist.

Eine Idee, die mir in den Sinn kam, war zu verwenden

ax.yaxis.tick_right()
ax2 = ax.twinx()
ax2.set_ylabel('foo')

Dies hat jedoch nicht den gewünschten Effekt, dass alle Beschriftungen (Häkchen- und Achsenbeschriftungen) auf der rechten Seite platziert werden, während die Ausdehnung der y-Achse erhalten bleibt. Kurz gesagt, ich möchte eine Möglichkeit, alle Beschriftungen der y-Achse von links nach rechts zu verschieben.

Antworten:


134

Es sieht so aus, als könnten Sie es tun mit:

ax.yaxis.set_label_position("right")
ax.yaxis.tick_right()

Siehe hier für ein Beispiel.


1
Wenn Sie versuchen, die Etiketten innerhalb / auf dem Plotbereich zu platzieren, sehen Sie dies: stackoverflow.com/a/47874059/4933053
qrtLs

Es funktioniert nur für die Legende, nicht für die Figuren der Achse. Haben Sie eine Idee, um dieses Problem zu lösen?
Agape Gal'lo

Gibt es einen einzigen Befehl, der beides in Matplotlib ausführen würde, oder ist er nur unnötig ausführlich?
ifly6

@ ifly6 Ich bin mir nicht sicher, ob es einen eingebauten gibt. Ich mache das:rhs = lambda ax: (ax.yaxis.set_label_position("right"), ax.yaxis.tick_right())
Aaron

16

Wenn Sie dem Beispiel in folgen matplotlibund eine Figur mit Beschriftungen auf beiden Seiten der Achsen erstellen möchten , ohne die subplots()Funktion verwenden zu müssen, ist hier meine Lösung:

from matplotlib import pyplot as plt
import numpy as np

ax1 = plt.plot()
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
plt.plot(t,s1,'b-')
plt.xlabel('t (s)')
plt.ylabel('exp',color='b')

ax2 = ax1.twinx()
s2 = np.sin(2*np.pi*t)
ax2.plot(t, s2, 'r.')
plt.ylabel('sin', color='r')
plt.show()


1
Das funktioniert bei mir nicht: File "prueba.py", line 11, in <module> ax2 = ax1.twinx() AttributeError: 'list' object has no attribute 'twinx'
Javier Garcia

4
versuchen Sie plt.gca (). twinx ()
Arne Babenhauserheide

tryax1 = plt.subplot()
shoegazerstella

2

(Entschuldigung für die Wiederbelebung der Frage)

Ich weiß, dass es ein schmutziger Trick ist, aber wenn Sie nicht zur Achsenbehandlung übergehen und in pltBefehlen bleiben möchten , können labelpadSie das Etikett mit dem Skalarargument rechts von der Diagrammseite positionieren. Funktioniert nach einigem Ausprobieren, und der genaue Skalarwert (?) Hat möglicherweise mit den Abmessungen Ihrer Figurengröße zu tun.

Beispiel:

# move ticks
plt.tick_params(axis='y', which='both', labelleft=False, labelright=True)

# move label
plt.ylabel('Your label here', labelpad=-725, fontsize=18)

1

Die vorherigen Antworten sind veraltet. Hier ist der neueste Code für das obige Beispiel:

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.01, 10.0, 0.01)
data1 = np.exp(t)
data2 = np.sin(2 * np.pi * t)

fig, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color=color)
ax1.plot(t, data1, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.set_ylabel('sin', color=color)  # we already handled the x-label with ax1
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  # otherwise the right y-label is slightly clipped
plt.show()

Von hier aus .

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.