Pycharm zeigt keine Handlung

100

Pycharm zeigt keine Handlung aus dem folgenden Code an:

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()

Was passiert ist, dass ein Fenster weniger als eine Sekunde lang erscheint und dann wieder verschwindet.

Bei Verwendung der Pyzo IEP IDE (unter Verwendung desselben Interpreters) mit demselben Code wird das Diagramm wie erwartet angezeigt.

... Das Problem muss also bei einer Einstellung auf Pycharm liegen. Ich habe versucht, sowohl python.exe als auch pythonw.exe als Interpreter mit denselben Ergebnissen zu verwenden.

Das ist meine 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
quelle
6
funktioniert plt.pyplot.show()?
Padraic Cunningham
1
Es tut nicht. Wenn genau 'plt.pyplot.show ()' ausgeführt wird, funktioniert dies nicht. Soll ich etwas anderes schreiben als "Pyplot"? (noob hier).
Rasmus Larsen
Was passiert, wenn Sie den Code in Pycharm ausführen?
Padraic Cunningham
Wenn ich die Datei starte, passiert dasselbe: Ein Fenster erscheint schnell und verschwindet, Konsolendruck: Der Vorgang ist mit dem Exit-Code 0 beendet. Wenn ich es an die Konsole sende, erscheint und bleibt das Fenster, aber es wird nichts im Fenster gezeichnet, es ist nur weiß. Die Beschriftung des Fensters lautet "Abbildung 1 (reagiert nicht)"
Rasmus Larsen
Sie sollten matplotlib.pyplot hinzufügen, um es zu visualisieren. Referenz: stackoverflow.com/a/29042575/4989929
Ronak Poriya

Antworten:

102

Benutz einfach

plt.show()

Dieser Befehl weist das System an, den Plot in Pycharm zu zeichnen.

Beispiel:

plt.imshow(img.reshape((28, 28)))
plt.show()
Amit Lohan
quelle
4
Es ist wirklich erstaunlich - das hat bei mir funktioniert und keiner der anderen hat es getan. Was überraschend war, war, dass ich plt.show () in Jupyter Notebook nicht brauchte, keine Ahnung, warum das Verhalten in PyCharm
Ambareesh am
hier gilt das gleiche. Ich brauchte es nicht in Jupyter Notebook
Pooria
Ich vergesse immer, das auch zu nennen. Dies weist das System an, es tatsächlich in Pycharm zu zeichnen. Das Notebook ruft standardmäßig automatisch Zeichen- und Druckfunktionen auf. Ich denke, es wurde so gemacht, um das Prototyping zu beschleunigen.
MNM
Was ist, wenn ich es verwenden muss, plt.draw()da ich die Abbildung später aktualisiere? plt.show()funktioniert gut, plt.draw()zeigt aber nichts in PyCharm.
CGFoX
1
Könnte sein, dass Sie es in Notizbüchern nicht benötigen, weil Sie so etwas getan haben %matplotlib inline. @CGFox, draw soll explizit in den Speicher gerendert, aber nicht auf dem Bildschirm (oder in der Datei) angezeigt werden. Sie müssen entweder plt.pause (0.1) ausführen, damit die Diagramme angezeigt werden, oder plt.show (pause = True) an einer anderen Stelle im Code
aufrufen
54

Mir ist klar, dass dies alt ist, aber ich dachte, ich würde ein Missverständnis für andere Reisende aufklären. Die Einstellung plt.pyplot.isinteractive()auf Falsebedeutet, dass der Plot mit bestimmten Befehlen zum Zeichnen (dh plt.pyplot.show()) gezeichnet wird . Die Einstellung plt.pyplot.isinteractive()auf Truebedeutet, dass jeder pyplot( plt) Befehl einen Zeichenbefehl auslöst (dh plt.pyplot.show()). Was Sie also höchstwahrscheinlich gesucht haben, ist plt.pyplot.show()am Ende Ihres Programms, um das Diagramm anzuzeigen.

Als Randnotiz können Sie diese Anweisungen etwas verkürzen, indem Sie den folgenden Importbefehl import matplotlib.pyplot as pltanstelle von verwenden matplotlib as plt.

user3915686
quelle
14
Das Hinzufügen von plt.show (block = True) am Ende meiner Funktion hat bei mir funktioniert. Danke für die Klarstellung. (Python 3.x, PyCharm 2016.1.4, Ubuntu)
SummerEla
Dies funktioniert für mich (Python 2.7, Pycharm 2016.3, Ubuntu 16.04): "importiere matplotlib.pyplot als plt", dann das Funktionsdiagramm aus DataFrame wie in "corr_data [col] .plot (kind =" bar ", figsize = (8, 5), grid = True, color = "r", title = col) "und vor dem Verlassen der Funktion" plt.show () "
Taka
34

Ich hatte das gleiche Problem. Überprüfen Sie, ob plt.isinteractive()True ist. Es hat mir geholfen, es auf "Falsch" zu setzen.

plt.interactive(False)
DanT
quelle
9
Durch Aufrufen von plt.show (block = True) konnte ich das Diagramm einmal anzeigen. Die Konsole wurde jedoch auch nach dem Schließen des Diagrammfensters blockiert.
DanT
plt.interactive (False) hat es für mich in PyCharm
getan
Ich habe Python nicht mehr installiert, daher weiß ich nicht, ob es für mich funktionieren würde, aber da es für andere funktioniert, werde ich diese Antwort akzeptieren (ich hoffe, dass dies gemäß den Stackoverflow-Regeln korrekt ist)
Rasmus Larsen
8
Die richtige Lösung besteht darin, plt.show (block = True) zu setzen, wie @charlie unten vorgeschlagen hat. Nachdem Sie diese Zeile hinzugefügt haben, hatte der Wert des Flags plt.interactive () keinen Einfluss auf das angezeigte Diagramm.
Erfrierungen
Dies funktionierte bei mir nicht `für cluster_id im Bereich (len (tempx [0])): plt.plot (tempx, tempy, 'rx--', markerize = 8) plt.legend (loc = 4, framealpha = 0.5) plt.interactive (False) plt.show (block = True) `
Mona Jalal
29

Ich habe verschiedene Lösungen ausprobiert, aber was schließlich für mich funktioniert hat, war plt.show(block=True). Sie müssen diesen Befehl nach dem myDataFrame.plot()Befehl hinzufügen, damit dies wirksam wird. Wenn Sie mehrere Diagramme haben, fügen Sie einfach den Befehl am Ende Ihres Codes hinzu. Damit können Sie alle Daten anzeigen, die Sie zeichnen.

Charlie Armstrong
quelle
2
Das hat es für mich getan. Sollte die akzeptierte Antwort sein. Das Spielen mit dem plt.interactive () hat nichts gebracht
Erfrierungen
Ich stimme zu, weil mir das auch geholfen hat. Das Setzen des interaktiven Modus auf False und das Hinzufügen von "DISPLAY = TRUE" zu den Umgebungsvariablen hat nicht geholfen.
Fábio
22
import matplotlib
matplotlib.use('TkAgg')

Funktioniert bei mir. (PyCharm / OSX)

Joe Bobson
quelle
Dies hat auch bei Windows 10 plt.show()funktioniert, als es in einer neueren Version von PyCharm (2020.1) nicht mehr geholfen hat.
Corbie
14

Ich teste in meiner Version von Pycharm (Community Edition 2017.2.2). Möglicherweise müssen Sie sowohl plt.interactive (False) als auch plt.show (block = True) wie folgt ankündigen:

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
quelle
Tut mir leid das zu hören. Ich finde, dass es auch in Pycharm 2017.3 (Community Edition) funktioniert. Können Sie versuchen, eine neue Version von Pycharm zu verwenden?
Tairen
Hallo Saria, tut mir leid. Ich teste es in meinem Pycharm 2018.1.2 (Community Edition) mit Ubuntu OS. Es funktioniert auch.
Tairen
Hallo, es funktioniert für Pycharm 2019.3 mit MacOs Catalina
Milad nourizade
13

Ich habe eine Lösung gefunden. Das hat bei mir funktioniert:

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
quelle
Aber ich stehe jetzt vor einem neuen Problem. Sobald der Plot in einem neuen Fenster generiert wurde, wird der neue Code, den ich nach dem Plot hinzugefügt habe, erst ausgeführt, wenn ich das neu geöffnete Fenster schließe.
Dhruv
2
Die wichtige Zeile, die in der Frage fehlte, ist plt.show ()
Yoav
6

Bald nach dem Anruf

plt.imshow() 

Anruf

plt.show(block = True)

Sie erhalten das Matplotlib-Popup mit dem Bild.

Dies ist ein blockierender Weg. Ein weiteres Skript wird erst ausgeführt, wenn der Pop geschlossen ist.

Sudeep K Rana
quelle
Das habe ich gesucht.
NelsonGon
5

Bei mir war das Problem die Tatsache, dass matplotlib das falsche Backend verwendete. Ich benutze Debian Jessie.

In einer Konsole habe ich folgendes gemacht:

import matplotlib
matplotlib.get_backend()

Das Ergebnis war: 'agg', während dies 'TkAgg' sein sollte.

Die Lösung war einfach:

  1. Deinstallieren Sie matplotlib über pip
  2. Installieren Sie die entsprechenden Bibliotheken: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. Installieren Sie matplotlib erneut über pip.
Arie
quelle
5

Fügen Sie einfach hinzu plt.pyplot.show(), das wäre in Ordnung.

Die beste Lösung ist das Deaktivieren von SciView.

Taki Guan
quelle
4

Ich habe in meiner Version auf PyCharm 2017.1.2 getestet. Ich habe interaktiv (True) und show (block = True) verwendet.

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
quelle
4

Keiner der oben genannten Punkte hat bei mir funktioniert, aber der folgende hat funktioniert:

  1. Deaktivieren Sie das Kontrollkästchen (Diagramme im Werkzeugfenster anzeigen) in pycharm settings > Tools > Python Scientific.

  2. Ich habe den Fehler erhalten No PyQt5 module found. Die Installation der PyQt5Verwendung von:

    sudo apt-get install python3-pyqt5

Beachten Sie, dass für einige nur der erste Schritt ausreicht und funktioniert.

AbdulRehmanLiaqat
quelle
1
Bitte machen Sie klarer, dass der erste Schritt immer noch die Lösung sein könnte, da es für mich funktioniert hat. So ausgedrückt hat die andere sich wiederholende Antwort von @ amir1122 ein Existenzrecht. Das ist natürlich auch in Ordnung, und du hast immer noch meine Gegenstimme.
Lorenz
1
@ Lorenz. Aktualisiert gemäß Ihrem Vorschlag, was Sinn macht.
AbdulRehmanLiaqat
Schritt 1 funktioniert, fühlt sich aber wie eine Problemumgehung an. Ich vermute in meinem Fall, dass es daran liegt, dass mehrere Versionen von Python (3.6, 3.7 und 3.8) im Umlauf sind.
Josiah Yoder
2

Meine Umgebung: macOS & anaconda3

Das funktioniert bei mir:

matplotlib.use('macosx')

oder interaktiver Modus:

matplotlib.use('TkAgg')
Zoe L.
quelle
Fügen Sie dies hinzu, bevor Sie matplotlib.pyplot
Zoe L
2

Ich hatte dieses Problem und ich konnte es lösen, Sie können meinen Weg testen. Deaktivieren Sie "Diagramme im Werkzeugfenster anzeigen" unter Einstellung -> Werkzeuge -> Python Scientific

amir1122
quelle
1
Diese Antwort wurde bereits vor zwei Jahren gegeben (z . B. in stackoverflow.com/a/52221178/466862 ). Stellen Sie bei der Beantwortung älterer Fragen sicher, dass Sie entweder eine neue, andere Lösung oder eine wesentlich bessere Erklärung beantworten.
Mark Rotteveel
Dies wiederholt die Antwort von @ AbdulRehmanLiaqat, stellt jedoch zumindest klar fest, dass dies eine mögliche Lösung sein kann. Ich habe dies zuerst wegen der Wiederholung abgelehnt. Jetzt habe ich gestimmt, einfach weil die andere Antwort nicht klar besagt, dass dieser einzelne Schritt hier es bereits lösen kann, sondern einen Fehler erwähnt, der in meinem Fall nicht aufgetreten ist.
Lorenz
1

Der Kommentar von DanT hat dies für mich behoben, matplotlib mit pycharm unter Linux mit dem GTKagg-Backend. Beim Importieren von matplotlib würde folgende Fehlermeldung angezeigt:

>>> import matplotlib as mpl

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

Wenn Sie so etwas planen:

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

Ein Zahlenbildschirm wird angezeigt, es werden jedoch keine Diagramme angezeigt. mit:

plt.show(block=True)

zeigt die Grafik korrekt an.

Bastiaan
quelle
1

In meinem Fall wollte ich Folgendes tun:

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

Nach einer Mischung der Lösungen hier bestand meine Lösung darin, vorher die folgenden Befehle hinzuzufügen:

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

mit den folgenden zwei Importen

   import matplotlib
   import matplotlib.pyplot as plt

Es scheint, dass alle Befehle in meinem Fall mit einem MBP mit ElCapitan und PyCharm 2016.2.3 erforderlich sind. Schöne Grüße!

Marc Torrellas
quelle
1

In nicht interaktiver Umgebung müssen wir plt.show verwenden (block = True)

tkr_in
quelle
1

Für diejenigen, die ein Skript in einer IDE ausführen (und nicht in einer interaktiven Umgebung wie einer Python-Konsole oder einem Notebook arbeiten), war dies die intuitivste und einfachste Lösung:

plt.imshow(img)
plt.waitforbuttonpress()

Es zeigt die Figur und wartet, bis der Benutzer auf das neue Fenster klickt. Erst dann wird das Skript fortgesetzt und der Rest des Codes ausgeführt.

Azim
quelle
1

Ich konnte hier eine Kombination aus einigen der anderen Vorschläge für mich arbeiten bekommen, aber nur während der Hin- und Herschalten plt.interactive(False)zu Trueund wieder zurück.

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

Dies wird meine Handlungen aufblitzen lassen. Stellen Sie dann die FalseOption zum Anzeigen ein.

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

Wie bereits erwähnt, wurde mein Programm erst beendet, wenn alle Fenster geschlossen waren. Hier sind einige Details zu meiner aktuellen Laufumgebung:

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.
quelle
0

Eine Eigenschaft muss für Pycharm festgelegt werden.

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
quelle
0

Ändern Sie den Import in:

import matplotlib.pyplot as plt

oder benutze diese Zeile:

plt.pyplot.show()
Mise
quelle
0

Ich benutze Ubuntu und habe versucht, wie @Arie oben sagte, aber mit dieser Zeile nur im Terminal:

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

Und es hat funktioniert!

Farouk Fadly
quelle
0

In Pycharm wird die Matplotlib.plot manchmal nicht angezeigt.

plt.show()Überprüfen Sie nach dem Aufruf die rechte Symbolleiste für SciView. In SciView werden alle generierten Diagramme gespeichert.

DAVIS BENNY 15MIS0426
quelle
0

Ich hatte oben einen Fehler, als ich versuchte, ein Histogramm zu zeichnen, und unten Punkte arbeiteten für mich.

Betriebssystem: Mac Catalina 10.15.5

Pycharm-Version: Community-Version 2019.2.3

Python-Version: 3.7

  1. Ich habe die Importanweisung wie folgt geändert (von - nach)

von :

import matplotlib.pylab as plt

zu:

import matplotlib.pyplot as plt

  1. und plot Anweisung nach unten (meine Befehlsform pyplot wurde in plt geändert)

von:

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") 

zu:

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. Verwenden Sie plt.show, um das Histogramm anzuzeigen

plt.show()

Tapan Hegde
quelle