Subplots twinx()

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Ameinsenpeter
User
Beiträge: 12
Registriert: Freitag 2. Oktober 2020, 09:32

Hallo Community,
bin gerade dabei, Daten zu visualisieren. Dafür habe ich eine figure erstellt mit 6 Subplots. Bei jedem dieser Subplots möchte ich nun eine zweite y-Achse einfügen via twinx().
Leider klappt das nicht wie ich mir das vorstelle und langsam bin ich am verzweifeln. Mein Code sieht in etwa so aus:

Code: Alles auswählen

fig, ax = plt.subplots(3, 2, figsize = (...))
# Hier nun if/else um Zeile und Spalte zu bestimmen (funktioniert, aber uninteressant)
ax[zeile, spalte].plot(xDaten, yDaten, ...)
ax2 = fig.gca().twinx()
ax2.plot(xDaten, y2Daten, ...)
Das funktioniert leider nur insofern, dass nur beim letzten subplot, also ax[2,1], eine zweite y-Achse da ist.
Nun meine Frage, weiß jemand wie ich bei allen subplots eine zweite y-Achse bekomme?

Vielen Dank schon mal und Grüße an alle

Peter
Benutzeravatar
__blackjack__
User
Beiträge: 13928
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ameinsenpeter: `Figure.gca()` liefert das *eine* aktuelle `Axes`-Objekt und das ist eben immer das zuletzt hinzugefügte. Du hast die einzelnen `Axes`-Objekte ja in `ax`.

Code: Alles auswählen

ax[zeile, spalte].plot(xDaten, yDaten, ...)
ax2 = fig.gca().twinx()
ax2.plot(xDaten, y2Daten, ...)

# =>

ax2 = ax[zeile, spalte]
ax2.plot(xDaten, yDaten, ...)
ax2.twinx()
ax2.plot(xDaten, y2Daten, ...)
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Ameinsenpeter
User
Beiträge: 12
Registriert: Freitag 2. Oktober 2020, 09:32

@blackjack, danke wieder mal für deine Hilfe. Ich dachte das aktuelle axes Objekt wäre das, in das gerade geplottet wird. Hab ich wohl falsch gedacht.
Mit deinem Code hat es noch nicht ganz geklappt, jedoch war das schon sehr nah.
Hier nochmal der Code der das Problem löst, für alle die das selbe Problem haben :D :

Code: Alles auswählen

ax1 = ax[zeile, spalte]
ax1.plot(xDaten, yDaten, ...)
ax2 = ax1.twinx()
ax2.plot(xDaten, y2Daten, ...)
Antworten