Muszę utworzyć figurę w pliku bez wyświetlania jej w notatniku IPython. Nie mam jasności co do interakcji między IPython
iw matplotlib.pylab
tym zakresie. Ale kiedy dzwonię pylab.savefig("test.png")
do bieżącej liczby, oprócz zapisania w test.png
. Często jest to niepożądane podczas automatyzacji tworzenia dużego zestawu plików wydruku. Lub w sytuacji, gdy potrzebny jest plik pośredni do zewnętrznego przetwarzania przez inną aplikację.
Nie jestem pewien, czy jest to matplotlib
lub IPython
notebook pytanie.
ioff
Odpowiedzi:
To jest pytanie matplotlib i możesz obejść ten problem, używając zaplecza, które nie wyświetla się użytkownikowi, np. „Agg”:
EDYCJA: Jeśli nie chcesz stracić możliwości wyświetlania wykresów, wyłącz tryb interaktywny i dzwoń tylko
plt.show()
wtedy, gdy jesteś gotowy do wyświetlenia wykresów:źródło
close()
orazshow()
polecenia i , które powinny rozwiązać twój problem. Jak odkryłeś, zmiana backendów w locie nie jest obsługiwana.plt.plot()
jeśli tryb interaktywny jest włączony. Wyłączenie trybu interaktywnego opóźnia wyświetlanie wykresów doplt.show()
. Ponieważ używasz notatnika ipython, tryb interaktywny jest traktowany inaczej.matplotlib.use('Agg')
sam załatwił sprawę. Nie potrzebowałem żadnegoplt.show()
lubplt.ioff()
w moim kodzie.Nie musimy
plt.ioff()
lubplt.show()
(jeśli używamy%matplotlib inline
). Możesz przetestować powyższy kod bezplt.ioff()
.plt.close()
ma zasadniczą rolę. Spróbuj tego:Jeśli uruchomisz ten kod w iPythonie, wyświetli się drugi wykres, a jeśli dodasz
plt.close(fig2)
go na końcu, nic nie zobaczysz.Podsumowując, jeśli zamkniesz figurę
plt.close(fig)
, nie zostanie ona wyświetlona.źródło
plt.ioff
dostanęRuntimeWarning: More than 20 figures have been opened...
.plt.close
rozwiązałem to.