Jak ponownie uzyskać interaktywne wykresy w Spyder / IPython / matplotlib?

92

Zaktualizowałem Python (x, y) 2.7.2.3 do 2.7.6.0 w Windows 7 (i byłem szczęśliwy widząc, że w końcu mogę ponownie wpisać function_name?i zobaczyć ciąg dokumentów w Inspektorze obiektów), ale teraz kreślenie nie działa tak, jak jest przyzwyczajony.

Wcześniej (Spyder 2.1.9, IPython 0.10.2, matplotlib 1.2.1), kiedy na przykład kreśliłem ten skrypt , kreślił on wykresy poboczne obok siebie w interaktywnym oknie:

wprowadź opis obrazu tutaj

Teraz (Spyder 2.2.5, IPython 1.2.0, Matplotlib 1.3.1), kiedy próbuję wykreślić rzeczy, robi to podploty jako małe wbudowane pliki PNG, co jest zmianą w IPythonie :

małe wbudowane pliki PNG

Poszedłem więc do opcji i znalazłem to:

opcje graficzne

co wydaje się mówić, że mogę odzyskać stare interaktywne wykresy, z 4 wykresami podrzędnymi wyświetlanymi obok siebie, ale kiedy przełączam się na „Automatyczny” i próbuję coś wykreślić, nic to nie daje. Żadnych fabuł.

Jeśli przełączę to menu rozwijane na Qt lub odznaczę opcję „Aktywuj wsparcie”, wykreśla tylko pierwszy wykres podrzędny lub jego część, a następnie zatrzyma się:

wprowadź opis obrazu tutaj

Jak uzyskać stare zachowanie 4 równoległych wykresów podrzędnych na jednej figurze, z którą mogę wchodzić w interakcje?

endolit
źródło
Myślę, że to powinno być zgłoszeniem błędu do pythonxy. Moje naiwne przypuszczenie jest takie, że używają pyplot do obsługi wszystkiego, co knują i są ugryzieni w tyłek (co wydaje się błędne, ponieważ mają własny widget qt).
tacaswell
1
@tcaswell Kim są „oni” i czego użyliby zamiast pyplot?
endolit
1
Czy możesz odtworzyć ten problem poza pythonxy (po prostu używając prostego ipython + qtconsole)? Nie ma wystarczających informacji, aby ustalić, co się dzieje.
tacaswell
1
Domyślam się, że to błąd w Spyder (Spyder to IDE, pythonxy to dystrybucja).
Thomas K
1
@tcaswell: Aha. Wygląda na to, że mój skrypt generuje błędy matplotlib, które są następnie wysyłane w inne miejsce niż konsola IPython. Pojawiają się, jeśli zamiast tego używam konsoli Qt, a teraz, gdy jej szukam, pojawiają się na zwykłej karcie konsoli Spydera. Jeśli zrobię prostszy skrypt, zadziała, niezależnie od tego, czy jest zorientowany na maszynę stanową, czy obiektowo. Założyłem, że muszę zmienić niektóre ustawienia IPythona z powodu nowych wykresów inline.
endolit

Odpowiedzi:

136

Zmień backend na automatyczny:

Narzędzia> preferencje> konsola IPython> grafika> zaplecze graficzne> zaplecze: automatyczne

Następnie zamknij i otwórz Spydera.

Victor Arellano
źródło
27
Zamykanie i otwieranie jest rzeczywiście konieczne. Zastanawiam się tylko, dlaczego to nie jest wartość domyślna.
Mathias711
5
Ponadto, dla każdego, kto nadal nie widzi swoich działek (tak jak ja nie), okno wykresu może po cichu pojawiać się_za_ oknem konsoli (przynajmniej tak jest w Spyder w systemie Windows 10), więc być może będziesz musiał poszukać swojego okna.
Joshua Glazer
3
Dla tych, którzy mają problemy ze znalezieniem tego, znajduje się pod adresempython > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
cameronroytaylor
6
Zamiast restartować Spydera, możesz także po prostu zrestartować jądro (albo klikając kółko ustawień w konsoli, a następnie "Restart kernel" lub przez skrót klawiszowy (na Mac Cmd +).
Michael
Nie mam pojęcia, dlaczego, ale zmiana na Automatyczny, ponowne uruchomienie Spydera, a następnie zmiana z powrotem na Inline spowodowała, że ​​wykresy wbudowane zaczęły się wyświetlać za każdym razem, gdy wydam polecenie wejściowe w pętli. To jest bardzo pomocne!
Josiah Yoder,
51

Możesz szybko to kontrolować, wpisując wbudowane magiczne polecenia w konsoli Spydera IPython, które znajduję szybciej niż wybieranie ich z menu preferencji. Zmiany zaczynają obowiązywać natychmiast, bez konieczności ponownego uruchamiania Spydera lub jądra.

Aby przełączyć się na wykresy „automatyczne” (tj. Interaktywne), wpisz:

%matplotlib auto

następnie jeśli chcesz przełączyć się z powrotem na „inline”, wpisz to:

%matplotlib inline

(Uwaga: te polecenia nie działają na konsolach innych niż IPython)

Zobacz więcej informacji na ten temat: Cel „% matplotlib inline”

Mike T.
źródło
W Pythonie 3.6 otrzymujęmatplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
Karlo
2
@Karlo, że błąd jest oczekiwany od konwencjonalnego interpretera „Pythona”. Ta składnia jest poprawna tylko z ipythonem lub Spyderem.
Mike T
OK, używałem go w Spyder, ale w konsoli Pythona. Rzeczywiście, działa w konsoli IPython.
Karlo,
3
Czy jest sposób, aby ustawić to za pomocą skryptu? Mianowicie, aby wybrać, gdzie jest wyjście wykresu w skrypcie? Dziękuję Ci.
Royi
1
Wydaje się, że nie działa to w Spyder, mimo że jest to sposób na zrobienie tego w normalnym oknie IPythona. U mnie działało korzystanie z preferencji menu; nie wiem, dlaczego tak się nie dzieje.
Żółwie są słodkie
10

Po zastosowaniu: Narzędzia> preferencje> Grafika> Backend> Automatycznie Po prostu zrestartuj jądro wprowadź opis obrazu tutaj

I na pewno otrzymasz interaktywną fabułę. Miłego kodowania!

Archit Pandey
źródło
5

Jak powiedziano w komentarzach, problem leży w twoim skrypcie. Właściwie są 2 problemy:

  • Wystąpił błąd matplotlib, myślę, że przekazujesz argument jako Nonegdzieś. Może z powodu domyślnego nakazu?
  • Dzwonisz show()po każdej poletko. show()należy wywołać raz na końcu skryptu. Alternatywą jest użycie trybu interaktywnego, poszukaj ionw dokumentacji matplotlib.
J. Martinot-Lagarde
źródło
2

W rzeczywistości jest to dość łatwe do naprawienia i nie wymaga żadnego kodowania:

1. Kliknij zakładkę Plots nad konsolą. 2. Następnie w prawym górnym rogu ekranu wykresów kliknij przycisk opcji. 3. Na koniec usuń zaznaczenie przycisku „Mute inline plotting”

Teraz ponownie uruchom skrypt, a wykresy powinny pojawić się w konsoli.

Twoje zdrowie.

Chris
źródło