Matplotlib: Wie stelle ich die aktuelle Zahl ein?


83

Dies ist hoffentlich eine einfache Frage, aber ich kann sie im Moment nicht herausfinden. Ich möchte matplotlib verwenden, um 2 Figuren zu zeigen und sie dann interaktiv zu verwenden. Ich erstelle die Figuren mit:

import matplotlib
import pylab as pl

f1 = pl.figure()
f2 = pl.figure()

und kann die MATLAB-ähnliche Pyplot-Oberfläche verwenden, um beide Figuren zu zeichnen und zu zeichnen. Mit

current_figure = pl.gcf()

Ich kann die aktuell aktive Figur für die Pyplot-Oberfläche bestimmen, abhängig davon, auf welche Figur ich geklickt habe. Jetzt möchte ich mit der Pyplot-Schnittstelle etwas zur ersten Figur zeichnen, aber die aktuelle Figur kann eine davon sein. Also gibt es so etwas

pl.set_current_figure(figure)

oder eine Problemumgehung? (Ich weiß, dass ich die objektorientierte Oberfläche verwenden kann, aber für interaktive Dinge ist es viel schöner, nur Befehle wie plot (x, y) zu verwenden.)

Antworten:


93

Sie können die Zahl einfach f1als neue aktuelle Zahl festlegen mit:

pl.figure(f1.number)

Eine andere Möglichkeit besteht darin, Abbildungen Namen (oder Nummern) zu geben, um den Code leichter lesbar zu machen:

pl.figure("Share values")
# ... some plots ...
pl.figure("Profits")
# ... some plots ...

pl.figure("Share values")  # Selects the first figure again

Tatsächlich können Zahlen "Zahlen" Zeichenfolgen sein, die wohl expliziter sind als einfache Zahlen.

PS : Das Pyplot-Äquivalent von pylab.figure()ist matplotlib.pyplot.figure().


1
Gibt es eine gute Möglichkeit, dies mit matplotlib.figure.Figure anstelle von pylab zu tun?
Tylerthemiler

@tylerthemiler: Ja, aber das wäre matplotlib.pyplot.figure().
Eric O Lebigot

Wenn Sie dasselbe mit Achsen machen möchten, verwenden Sie einfach pylab.sca(my_axis)("Aktuelle Achse einstellen").
PiHalbe

14

Geben Sie jeder Figur eine Nummer:

f1 = pl.figure(1)
f2 = pl.figure(2)
# use f2
pl.figure(1) # make f1 active again
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.