Matplotlib: jak ustawić aktualną liczbę?

83

Mam nadzieję, że jest to proste pytanie, ale w tej chwili nie mogę tego rozgryźć. Chcę użyć matplotlib, aby wyświetlić 2 figury, a następnie użyć ich interaktywnie. Tworzę figury za pomocą:

import matplotlib
import pylab as pl

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

i może używać interfejsu pyplot podobnego do MATLAB do kreślenia i rysowania na obu figurach. Z

current_figure = pl.gcf()

Mogę określić aktualnie aktywną liczbę dla interfejsu pyplot, w zależności od tego, którą figurę kliknąłem. Teraz chcę narysować coś do pierwszej figury za pomocą interfejsu pyplot, ale bieżącą liczbą może być dowolna z nich. Więc jest coś takiego

pl.set_current_figure(figure)

czy jakieś obejście? (Wiem, że mogę używać interfejsu obiektowego, ale w przypadku rzeczy interaktywnych używanie poleceń takich jak plot (x, y) jest znacznie przyjemniejsze)

Aleksandra
źródło

Odpowiedzi:

96

Możesz po prostu ustawić liczbę f1jako nową bieżącą liczbę za pomocą:

pl.figure(f1.number)

Inną opcją jest nadanie rysunkom nazw (lub numerów), co może ułatwić odczytanie kodu:

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

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

W rzeczywistości „liczby” liczbowe mogą być łańcuchami, które są prawdopodobnie bardziej wyraźne niż proste liczby.

PS : Odpowiednik pyplota pylab.figure()is matplotlib.pyplot.figure().

Eric O Lebigot
źródło
2
Czy istnieje dobry sposób na zrobienie tego za pomocą matplotlib.figure.Figure zamiast pylab?
tylerthemiler
@tylerthemiler: Tak, ale tak będzie matplotlib.pyplot.figure().
Eric O Lebigot
Jeśli chcesz zrobić to samo z osiami, po prostu użyj pylab.sca(my_axis)("ustaw aktualną oś").
PiHalbe
14

Nadaj każdej figurze numer:

f1 = pl.figure(1)
f2 = pl.figure(2)
# use f2
pl.figure(1) # make f1 active again
Hoa Long Tam
źródło