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)]'}

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

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.


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)

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.


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)


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)

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

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.


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.

5

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

Die beste Lösung ist das Deaktivieren von SciView.


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)

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.


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

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


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.


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!



1

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


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.


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

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

0

Ändern Sie den Import in:

import matplotlib.pyplot as plt

oder benutze diese Zeile:

plt.pyplot.show()

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!


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.