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)]'}
Rasmus Larsen
źródło
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()
Amit Lohan
źródło
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.

user3915686
źródło
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)
DanT
źródło
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.

Charlie Armstrong
źródło
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)

Joe Bobson
źródło
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)
tairen
źródło
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()
Dhruv
źródło
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.

Sudeep K Rana
źródło
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.
Arie
źródło
5

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

Najlepszym rozwiązaniem jest wyłączenie SciView.

Taki Guan
źródło
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)
m4ndy
źródło
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.

AbdulRehmanLiaqat
źródło
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')
Zoe L.
źródło
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

amir1122
źródło
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.

Bastiaan
źródło
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!

Marc Torrellas
źródło
1

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

tkr_in
źródło
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.

Azim
źródło
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
Nathan W.
źródło
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()
Nilesh Shinde
źródło
0

Zmień import na:

import matplotlib.pyplot as plt

lub użyj tej linii:

plt.pyplot.show()
Mise
źródło
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!

Farouk Fadly
źródł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.

DAVIS BENNY 15 MIS0426
źródło
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()

Tapan Hegde
źródło