Pycharm nie pokazuje fabuły


100

Pycharm nie pokazuje fabuły z następującego kodu:

import pandas as pd
import numpy as np
import matplotlib as plt

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))

ts = ts.cumsum()    
ts.plot()

Dzieje się tak, że okno pojawia się na mniej niż sekundę, a następnie ponownie znika.

Używając Pyzo IEP IDE (używając tego samego interpretera) na tym samym kodzie, wykres pokazuje zgodnie z oczekiwaniami.

... Więc problem musi być z jakimś ustawieniem na Pycharmie. Próbowałem używać zarówno python.exe, jak i pythonw.exe jako interpretera z tymi samymi wynikami.

To jest moje sys_info:

C:\pyzo2014a\pythonw.exe -u C:\Program Files (x86)\JetBrains\PyCharm Community Edition 3.4.1\helpers\pydev\pydevconsole.py 57315 57316
PyDev console: using IPython 2.1.0import sys; print('Python %s on %s' % (sys.version, sys.platform))
Python 3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, 13:02:30) [MSC v.1600 64 bit (AMD64)] on win32
sys.path.extend(['C:\\Users\\Rasmus\\PycharmProjects\\untitled2'])
In[3]: import IPython
print(IPython.sys_info())
{'commit_hash': '681fd77',
 'commit_source': 'installation',
 'default_encoding': 'UTF-8',
 'ipython_path': 'C:\\pyzo2014a\\lib\\site-packages\\IPython',
 'ipython_version': '2.1.0',
 'os_name': 'nt',
 'platform': 'Windows-8-6.2.9200',
 'sys_executable': 'C:\\pyzo2014a\\pythonw.exe',
 'sys_platform': 'win32',
 'sys_version': '3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, '
                '13:02:30) [MSC v.1600 64 bit (AMD64)]'}

6
nie plt.pyplot.show()działa?
Padraic Cunningham

1
To nie. Po uruchomieniu dokładnie „plt.pyplot.show ()” to nie działa. Czy zamiast „pyplot” powinienem napisać coś innego? (tutaj noob).
Rasmus Larsen

co się stanie, gdy uruchomisz kod w pycharm?
Padraic Cunningham

Kiedy uruchamiam plik, dzieje się to samo: okno szybko pojawia się i znika, drukowanie konsoli: Proces zakończony kodem zakończenia 0. Kiedy wysyłam go do konsoli, okno pojawia się i pozostaje, ale w oknie nic nie jest rysowane, jest po prostu białe. Etykieta okna to „Rysunek 1 (brak odpowiedzi)”
Rasmus Larsen,

Powinieneś dodać matplotlib.pyplot, aby go zwizulować. Patrz: stackoverflow.com/a/29042575/4989929
Ronak Poriya

Odpowiedzi:


103

Po prostu użyj

plt.show()

To polecenie mówi systemowi, aby narysował działkę w Pycharm.

Przykład:

plt.imshow(img.reshape((28, 28)))
plt.show()

4
To naprawdę niesamowite - to zadziałało na mnie i żadna z pozostałych nie. Zaskakujące było to, że nie potrzebowałem plt.show () w Jupyter Notebook, nie wiem, dlaczego zachowanie jest inne w PyCharm
Ambareesh

to samo tutaj. Nie potrzebowałem tego w Jupyter Notebook
pooria

Ja też zawsze zapominam o tym zadzwonić. To mówi systemowi, aby faktycznie narysował go w pycharm. Notebook domyślnie automatycznie wywoła funkcje rysowania i drukowania. Myślę, że został stworzony w taki sposób, aby przyspieszyć prototypowanie.
MNM

Co jeśli będę musiał użyć, plt.draw()ponieważ później aktualizuję rysunek? plt.show()działa dobrze, ale plt.draw()nic nie wyświetla w PyCharm.
CGFoX

1
Możliwe, że nie potrzebujesz tego w notatnikach, ponieważ zrobiłeś coś takiego %matplotlib inline. @CGFox, rysowanie ma jawnie renderować do pamięci, ale nie wyświetlać na ekranie (lub do pliku). Musisz albo plt.pause (0.1), aby wyświetlić wykresy, lub wywołać plt.show (pause = True) w innym punkcie kodu, aby zmusić je do renderowania
xaviersjs

54

Zdaję sobie sprawę, że to stare, ale pomyślałem, że wyjaśnię błędne przekonanie innym podróżnikom. Ustawienie plt.pyplot.isinteractive()na Falseoznacza, że ​​wykres będzie rysowany na podstawie określonych poleceń rysowania (tj plt.pyplot.show().). Ustawienie plt.pyplot.isinteractive()na Trueoznacza, że ​​każde polecenie pyplot( plt) wywoła polecenie rysowania (tj plt.pyplot.show().). Więc to, czego prawdopodobnie szukałeś, to plt.pyplot.show()koniec programu, aby wyświetlić wykres.

Na marginesie, możesz nieco skrócić te instrukcje, używając następującego polecenia importu import matplotlib.pyplot as pltzamiast matplotlib as plt.


14
Dodanie plt.show (blok = True) na końcu mojej funkcji działa dla mnie. Dziękuję za wyjaśnienie. (Python 3.x, PyCharm 2016.1.4, Ubuntu)
SummerEla,

To właśnie działa u mnie (Python 2.7, Pycharm 2016.3, Ubuntu 16.04): "import matplotlib.pyplot as plt", a następnie funkcja wykreśla z DataFrame, jak w "corr_data [col] .plot (kind =" bar ", figsize = (8, 5), grid = True, color = "r", title = col) "i przed opuszczeniem funkcji," plt.show () "
Taka

34

Miałem ten sam problem. Sprawdź, czy plt.isinteractive()to prawda. Ustawienie go na „Fałsz” pomogło mi.

plt.interactive(False)

9
Dzwonienie do plt.show (blok = True) pomogło mi raz pokazać wykres. Ale konsola została zablokowana nawet po zamknięciu okna wykresów.
DanT,

plt.interactive (False) zrobił to dla mnie w PyCharm
fantabolous

Nie mam już zainstalowanego Pythona, więc nie wiem, czy to zadziałaby dla mnie, ale ponieważ działa dla innych, zaakceptuję tę odpowiedź (mam nadzieję, że jest to poprawne zgodnie z regułami stackoverflow)
Rasmus Larsen

8
Prawidłowym rozwiązaniem jest ustawienie plt.show (blok = True) zgodnie z sugestią @charlie poniżej. Po dodaniu tej linii wartość flagi plt.interactive () nie miała wpływu na wyświetlany wykres.
odmrożenie

To nie zadziałało dla mnie `for cluster_id in range (len (tempx [0])): plt.plot (tempx, tempy, 'rx--', markersize = 8) plt.legend (loc = 4, framealpha = 0.5) plt.interactive (False) plt.show (block = True) `
Mona Jalal

29

Próbowałem różnych rozwiązań, ale ostatecznie zadziałało plt.show(block=True). Aby to zadziałało, musisz dodać to polecenie po myDataFrame.plot()poleceniu. Jeśli masz wiele wykresów, po prostu dodaj polecenie na końcu kodu. Pozwoli ci to zobaczyć wszystkie wykreślane dane.


2
Zrobiło to dla mnie. Powinna być zaakceptowana odpowiedź. Zadzierając z plt.interactive () nic
odmrożenie

Zgadzam się, bo to też mi pomogło. Ustawienie trybu interaktywnego na False i dodanie „DISPLAY = TRUE” do zmiennych środowiskowych nie pomogło.
Fábio

22
import matplotlib
matplotlib.use('TkAgg')

Pracuje dla mnie. (PyCharm / OSX)


To zadziałało również dla mnie w systemie Windows 10, kiedy plt.show()nie pomogło już w nowszej wersji PyCharm (2020.1).
Corbie

14

Testuję w mojej wersji Pycharm (Community Edition 2017.2.2), może być konieczne ogłoszenie zarówno plt.interactive (False), jak i plt.show (block = True) w następujący sposób:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 6.28, 100)

plt.plot(x, x**0.5, label='square root')
plt.plot(x, np.sin(x), label='sinc')

plt.xlabel('x label')
plt.ylabel('y label')

plt.title("test plot")

plt.legend()

plt.show(block=True)
plt.interactive(False)

Przykro mi to słyszeć. Uważam, że działa również w Pycharm 2017.3 (wydanie społecznościowe). Czy możesz spróbować użyć nowej wersji Pycharm?
tairen

Cześć Saria, przepraszam za to. Testuję to w moim Pycharm 2018.1.2 (edycja społeczności) z systemem Ubuntu OS. To też działa.
tairen

Cześć, działa dla Pycharm 2019.3 z MacOs Catalina
Milad nourizade

13

Znalazłem rozwiązanie. To zadziałało dla mnie:

import numpy as np
import matplotlib.pyplot as plt

points = np.arange(-5, 5, 0.01)
dx, dy = np.meshgrid(points, points)
z = (np.sin(dx)+np.sin(dy))
plt.imshow(z)
plt.colorbar()
plt.title('plot for sin(x)+sin(y)')
plt.show()

Ale teraz mam nowy problem. Po wygenerowaniu wykresu w nowym oknie nowy kod, który dodałem po utworzeniu wykresu, nie działa, dopóki nie zamknę nowo otwartego okna.
Dhruv

2
Ważną linijką, której brakowało w pytaniu, jest plt.show ()
Yoav

6

Wkrótce po telefonie

plt.imshow() 

połączenie

plt.show(block = True)

Otrzymasz wyskakujące okienko matplotlib z obrazem.

To jest sposób blokujący. Dalszy skrypt nie będzie działał, dopóki pop nie zostanie zamknięty.


To jest to, czego szukałem.
NelsonGon

5

U mnie problemem był fakt, że matplotlib używał złego backendu. Używam Debiana Jessie.

W konsoli wykonałem następujące czynności:

import matplotlib
matplotlib.get_backend()

Wynik był: „agg”, podczas gdy to powinno być „TkAgg”.

Rozwiązanie było proste:

  1. Odinstaluj matplotlib przez pip
  2. Zainstaluj odpowiednie biblioteki: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. Zainstaluj ponownie matplotlib przez pip.

5

Dodaj tylko plt.pyplot.show(), że byłoby dobrze.

Najlepszym rozwiązaniem jest wyłączenie SciView.


4

Testowałem w mojej wersji na PyCharm 2017.1.2. Użyłem interaktywności (True) i show (blok = True).

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1//2000',periods=1000))
ts = ts.cumsum()
plt.interactive(True)
ts.plot()
plt.show(block=True)

4

Żadne z powyższych nie działało dla mnie, ale następujące:

  1. Wyłącz pole wyboru (Pokaż wykresy w oknie narzędzi) w pycharm settings > Tools > Python Scientific.

  2. Otrzymałem błąd No PyQt5 module found. Rozpoczęto instalację za PyQt5pomocą:

    sudo apt-get install python3-pyqt5

Uważaj, że dla niektórych wystarczy tylko pierwszy krok i działa.


1
Proszę wyjaśnić, że pierwszy krok może nadal być rozwiązaniem, ponieważ zadziałał dla mnie. Mówiąc w ten sposób, druga powtarzająca się odpowiedź @ amir1122 ma prawo istnieć. Co oczywiście jest w porządku i nadal masz moje poparcie.
Lorenz

1
@Lorenz. Zaktualizowano zgodnie z twoją sugestią, która ma sens.
AbdulRehmanLiaqat

Krok 1 działa, ale wydaje się obejściem. Podejrzewam, że w moim przypadku dzieje się tak dlatego, że mam wiele wersji Pythona (3.6, 3.7 i 3.8).
Josiah Yoder

2

Mój env: macOS i anaconda3

To działa dla mnie:

matplotlib.use('macosx')

lub tryb interaktywny:

matplotlib.use('TkAgg')

Dodaj to przed zaimportowaniem matplotlib.pyplot
Zoe L

2

miałem ten problem i mogłem go rozwiązać, możesz przetestować mój sposób .. wyłącz opcję "pokaż wykresy w oknie narzędzi" z ustawienia -> narzędzia -> python naukowe


1
Ta odpowiedź została udzielona już dwa lata temu (np. W stackoverflow.com/a/52221178/466862 ). Odpowiadając na starsze pytania, upewnij się, że odpowiadasz na nowe, inne rozwiązanie lub na znacznie lepsze wyjaśnienie.
Mark Rotteveel

To jest powtórzenie odpowiedzi @ AbdulRehmanLiaqat, ale przynajmniej jasno stwierdza, że ​​może to być możliwe rozwiązanie. Najpierw odrzuciłem to z powodu powtórzeń. Teraz zagłosowałem za, po prostu dlatego, że druga odpowiedź nie stwierdza jasno, że ten pojedynczy krok może już go rozwiązać, zamiast tego wspomina o błędzie, który później nie pojawił się w moim przypadku.
Lorenz,

1

Komentarz DanT naprawił to dla mnie, matplotlib z pycharm na Linuksie z zapleczem GTKagg. Po zaimportowaniu matplotlib otrzymywałbym następujący błąd:

>>> import matplotlib as mpl

Backend GTKAgg is interactive backend. Turning interactive mode on.
Failed to enable GUI event loop integration for 'gtk'

Podczas kreślenia czegoś takiego:

from matplotlib import pyplot as plt
plt.figure()
plt.plot(1,2)
plt.show()

Pojawił się ekran z postaciami, ale nie pojawiały się żadne wykresy. za pomocą:

plt.show(block=True)

wyświetla grafikę poprawnie.


1

W moim przypadku chciałem wykonać następujące czynności:

    plt.bar(range(len(predictors)), scores)
    plt.xticks(range(len(predictors)), predictors, rotation='vertical')
    plt.show()

Po mieszaniu rozwiązań tutaj, moim rozwiązaniem było dodanie wcześniej następujących poleceń:

    matplotlib.get_backend()
    plt.interactive(False)
    plt.figure()

z następującymi dwoma importami

   import matplotlib
   import matplotlib.pyplot as plt

Wygląda na to, że wszystkie polecenia są potrzebne w moim przypadku, z MBP z ElCapitan i PyCharm 2016.2.3. Pozdrowienia!



1

W nieinteraktywnym środowisku env musimy użyć plt.show (block = True)


1

Dla tych, którzy uruchamiają skrypt w środowisku IDE (i nie pracują w środowisku interaktywnym, takim jak konsola Pythona lub notebook), uznałem to za najbardziej intuicyjne i najprostsze rozwiązanie:

plt.imshow(img)
plt.waitforbuttonpress()

Pokazuje rysunek i czeka, aż użytkownik kliknie w nowe okno. Dopiero wtedy wznawia skrypt i uruchamia resztę kodu.


1

Udało mi się uzyskać połączenie niektóre inne sugestie tutaj pracy dla mnie, ale tylko wtedy, gdy przełączenie opcji plt.interactive(False)do Trueiz powrotem.

plt.interactive(True)
plt.pyplot.show()

Spowoduje to wyświetlenie moich działek. Następnie ustawienie Falsedozwolone do przeglądania.

plt.interactive(False)
plt.pyplot.show()

Jak zauważono, również mój program nie kończył się, dopóki wszystkie okna nie zostały zamknięte. Oto kilka szczegółów dotyczących mojego obecnego środowiska uruchamiania:

Python version 2.7.6
Anaconda 1.9.2 (x86_64)
(default, Jan 10 2014, 11:23:15) 
[GCC 4.0.1 (Apple Inc. build 5493)]
Pandas version: 0.13.1

0

Jedna właściwość musi być ustawiona na pycharm.

import matplotlib.pyplot as plt

plt.interactive(False)  #need to set to False

dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)

plt.show()

0

Zmień import na:

import matplotlib.pyplot as plt

lub użyj tej linii:

plt.pyplot.show()

0

Używam Ubuntu i próbowałem, jak powiedział powyżej @Arie, ale z tą linią tylko w terminalu:

sudo apt-get install tcl-dev tk-dev python-tk python3-tk

I zadziałało!


0

W Pycharm czasami Matplotlib.plot się nie pojawia.

Więc po wywołaniu plt.show()sprawdź na prawym pasku narzędzi dla SciView. Wewnątrz SciView będą przechowywane wszystkie wygenerowane wykresy.


0

Napotkałem powyższy błąd, gdy próbuję wykreślić histogram, a poniższe punkty zadziałały dla mnie.

System operacyjny: Mac Catalina 10.15.5

Wersja Pycharm: wersja dla społeczności 2019.2.3

Wersja Pythona: 3.7.0

  1. Zmieniłem oświadczenie importu jak poniżej (od - do)

z :

import matplotlib.pylab as plt

do:

import matplotlib.pyplot as plt

  1. i instrukcja plot na poniżej (zmieniono mój formularz polecenia pyplot na plt)

z:

plt.pyplot.hist(df["horsepower"])

# set x/y labels and plot title
plt.pyplot.xlabel("horsepower")
plt.pyplot.ylabel("count")
plt.pyplot.title("horsepower bins") 

do :

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. użyj plt.show, aby wyświetlić histogram

plt.show()

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.