Pycharm n'affiche pas l'intrigue

100

Pycharm n'affiche pas le tracé du code suivant:

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

Ce qui se passe, c'est qu'une fenêtre apparaît pendant moins d'une seconde, puis disparaît à nouveau.

En utilisant l'IDE Pyzo IEP (en utilisant le même interpréteur) sur le même code, le tracé s'affiche comme prévu.

... Donc le problème doit être avec certains paramètres sur Pycharm. J'ai essayé d'utiliser à la fois python.exe et pythonw.exe comme interprète avec les mêmes résultats.

C'est mon 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
la source
6
ça plt.pyplot.show()marche?
Padraic Cunningham
1
Ce ne est pas. Lorsque vous exécutez exactement 'plt.pyplot.show ()' cela ne fonctionne pas. Dois-je écrire autre chose au lieu de «pyplot»? (noob ici).
Rasmus Larsen
que se passe-t-il lorsque vous exécutez le code dans pycharm?
Padraic Cunningham
Lorsque je lance le fichier, la même chose se produit: une fenêtre apparaît et disparaît rapidement, impression de la console: Processus terminé avec le code de sortie 0. Lorsque je l'envoie à la console, la fenêtre apparaît et reste mais rien n'est dessiné dans la fenêtre, c'est juste blanc. Le libellé de la fenêtre est "Figure 1 (Ne répond pas)"
Rasmus Larsen
Vous devez ajouter matplotlib.pyplot pour le visuliser.Refer: stackoverflow.com/a/29042575/4989929
Ronak Poriya

Réponses:

103

Juste utiliser

plt.show()

Cette commande indique au système de dessiner le tracé dans Pycharm.

Exemple:

plt.imshow(img.reshape((28, 28)))
plt.show()
Amit Lohan
la source
4
C'est vraiment incroyable - cela a fonctionné pour moi, et aucun des autres n'a fonctionné. Ce qui était surprenant, c'est que je n'avais pas besoin de plt.show () dans Jupyter Notebook, je ne sais pas pourquoi le comportement est différent dans PyCharm
Ambareesh
pareil ici. Je n'en avais pas besoin dans Jupyter Notebook
pooria
J'oublie toujours d'appeler ça aussi. Cela indique au système de le dessiner réellement dans pycharm. Notebook appellera automatiquement les fonctions de dessin et d'impression par défaut. Je pense qu'il a été fait comme ça pour un prototypage plus rapide.
MNM le
Que faire si je dois utiliser plt.draw()puisque je mets à jour la figure plus tard? plt.show()fonctionne bien, mais plt.draw()ne montre rien dans PyCharm.
CGFoX
1
Peut-être que vous n'en avez pas besoin dans les cahiers parce que vous avez fait quelque chose comme ça %matplotlib inline. @CGFox, draw est explicitement destiné à rendre en mémoire mais pas à afficher à l'écran (ou au fichier). Vous devez soit plt.pause (0.1) pour obtenir les tracés à afficher, soit appeler plt.show (pause = True) à un autre moment du code pour les rendre
xaviersjs
54

Je me rends compte que c'est vieux, mais j'ai pensé que je dissiperais une idée fausse pour les autres voyageurs. Mettre plt.pyplot.isinteractive()à Falsesignifie que le tracé sera dessiné sur des commandes spécifiques pour dessiner (ie plt.pyplot.show()). Mettre plt.pyplot.isinteractive()à Truesignifie que chaque commande pyplot( plt) déclenchera une commande de dessin (ie plt.pyplot.show()). Donc, ce que vous cherchiez plus que probablement est plt.pyplot.show()à la fin de votre programme pour afficher le graphique.

En passant, vous pouvez raccourcir un peu ces instructions en utilisant la commande d'importation suivante import matplotlib.pyplot as pltplutôt que matplotlib as plt.

user3915686
la source
14
L'ajout de plt.show (block = True) à la fin de ma fonction est ce qui a fonctionné pour moi. Merci pour la clarification. (Python 3.x, PyCharm 2016.1.4, Ubuntu)
SummerEla
C'est ce qui fonctionne pour moi (Python 2.7, Pycharm 2016.3, Ubuntu 16.04): "import matplotlib.pyplot as plt", puis la fonction plot de DataFrame comme dans "corr_data [col] .plot (kind =" bar ", figsize = (8, 5), grid = True, color = "r", title = col) "et avant de quitter la fonction," plt.show () "
Taka
34

J'ai eu le même problème. Vérifiez si plt.isinteractive()c'est vrai. Le définir sur «False» m'a aidé.

plt.interactive(False)
DanT
la source
9
L'appel de plt.show (block = True) m'a aidé à afficher le graphique une fois pour moi. Mais la console était bloquée même après la fermeture de la fenêtre des graphiques.
DanT
plt.interactive (False) l'a fait pour moi dans PyCharm
fantastique
Je n'ai plus Python installé, donc je ne sais pas si cela fonctionnerait pour moi, mais comme cela fonctionne pour d'autres, j'accepterai cette réponse (j'espère que c'est correct selon les règles de stackoverflow)
Rasmus Larsen
8
La bonne solution est de définir plt.show (block = True) comme @charlie l'a suggéré ci-dessous. Après avoir ajouté cette ligne, la valeur de l'indicateur plt.interactive () n'avait aucune incidence sur le tracé affiché.
gelures du
Cela n'a pas fonctionné pour moi `pour 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

J'ai essayé différentes solutions mais ce qui a finalement fonctionné pour moi était plt.show(block=True). Vous devez ajouter cette commande après la myDataFrame.plot()commande pour que cela prenne effet. Si vous avez plusieurs tracés, ajoutez simplement la commande à la fin de votre code. Cela vous permettra de voir toutes les données que vous tracez.

Charlie Armstrong
la source
2
Cela l'a fait pour moi. Devrait être la réponse acceptée. Jouer avec le plt.interactive () n'a rien fait
engelures
Je suis d'accord parce que cela m'a aidé aussi. Définir le mode interactif sur False et ajouter "DISPLAY = TRUE" aux variables d'environnement n'a pas aidé.
Fábio
22
import matplotlib
matplotlib.use('TkAgg')

Travaille pour moi. (PyCharm / OSX)

Joe Bobson
la source
Cela a également fonctionné pour moi sur Windows 10 quand cela plt.show()n'a plus aidé dans une version plus récente de PyCharm (2020.1).
Corbie
14

Je teste dans ma version de Pycharm (Community Edition 2017.2.2), vous devrez peut-être annoncer à la fois plt.interactive (False) et plt.show (block = True) comme suit:

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
la source
Désolé d'entendre ça. Je trouve que cela fonctionne également dans Pycharm 2017.3 (édition communautaire). Pouvez-vous essayer d'utiliser une nouvelle version de Pycharm?
tairen
Salut, Saria, désolé pour ça. Je le teste dans mon Pycharm 2018.1.2 (édition communautaire) avec Ubuntu OS. Cela fonctionne aussi.
tairen
Salut, ça marche pour Pycharm 2019.3 avec MacOs Catalina
Milad nourizade
13

J'ai trouvé une solution. Cela a fonctionné pour moi:

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
la source
Mais je suis maintenant confronté à un nouveau problème. Une fois le tracé généré dans une nouvelle fenêtre, le nouveau code que j'ai ajouté après le tracé ne s'exécute pas, jusqu'à ce que je ferme la fenêtre nouvellement ouverte.
Dhruv
2
La ligne importante qui manquait dans la question est plt.show ()
Yoav
6

Peu de temps après avoir appelé

plt.imshow() 

appel

plt.show(block = True)

Vous obtiendrez le popup matplotlib avec l'image.

C'est une manière bloquante. Un autre script ne fonctionnera pas tant que le pop ne sera pas fermé.

Sudeep K Rana
la source
C'est ce que je cherchais.
NelsonGon
5

Avec moi, le problème était le fait que matplotlib utilisait le mauvais backend. J'utilise Debian Jessie.

Dans une console, j'ai fait ce qui suit:

import matplotlib
matplotlib.get_backend()

Le résultat était: 'agg', alors que cela devrait être 'TkAgg'.

La solution était simple:

  1. Désinstaller matplotlib via pip
  2. Installez les bibliothèques appropriées: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. Installez à nouveau matplotlib via pip.
Arié
la source
5

Ajoutez simplement plt.pyplot.show(), ce serait bien.

La meilleure solution consiste à désactiver SciView.

Taki Guan
la source
4

J'ai testé dans ma version sur PyCharm 2017.1.2. J'ai utilisé interactif (True) et show (block = 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
la source
4

Rien de ce qui précède n'a fonctionné pour moi, mais ce qui suit:

  1. Désactivez la case à cocher (Afficher les tracés dans la fenêtre d'outils) dans pycharm settings > Tools > Python Scientific.

  2. J'ai reçu l'erreur No PyQt5 module found. Nous sommes allés de l'avant avec l'installation de l' PyQt5utilisation:

    sudo apt-get install python3-pyqt5

Attention, pour certains, seul le premier pas suffit et fonctionne.

AbdulRehmanLiaqat
la source
1
Veuillez préciser que la première étape pourrait encore être la solution, car elle a fonctionné pour moi. Dit comme ceci, l'autre réponse répétitive de @ amir1122 a le droit d'exister. Ce qui est bien sûr aussi, et vous avez toujours mon vote favorable.
Lorenz
1
@Lorenz. Mis à jour selon votre suggestion, ce qui a du sens.
AbdulRehmanLiaqat
L'étape 1 fonctionne, mais ressemble à une solution de contournement. Je soupçonne dans mon cas que c'est parce que j'ai plusieurs versions de Python (3.6, 3.7 et 3.8) flottant.
Josiah Yoder le
2

Mon env: macOS et anaconda3

Cela fonctionne pour moi:

matplotlib.use('macosx')

ou mode interactif:

matplotlib.use('TkAgg')
Zoé L
la source
Ajoutez ceci avant d'importer matplotlib.pyplot
Zoe L
2

j'ai eu ce problème et je pourrais le résoudre, vous pouvez tester ma façon .. désactiver "afficher les tracés dans la fenêtre outil" de la configuration -> outils -> python scientifique

amir1122
la source
1
Cette réponse a déjà été fournie il y a deux ans (par exemple dans stackoverflow.com/a/52221178/466862 ). Lorsque vous répondez à des questions plus anciennes, assurez-vous de répondre à une nouvelle solution différente ou à une explication nettement meilleure.
Mark Rotteveel
C'est répéter la réponse de @ AbdulRehmanLiaqat, mais cela indique au moins clairement que cela peut être une solution possible. J'ai d'abord critiqué cela à cause de la répétition. Maintenant, j'ai voté pour, simplement parce que l'autre réponse n'indique pas clairement que cette seule étape ici peut déjà le résoudre, au lieu de cela, il mentionne une erreur par la suite qui n'apparaissait pas dans mon cas.
Lorenz
1

Le commentaire de DanT a corrigé cela pour moi, matplotlib avec pycharm sous Linux avec le backend GTKagg. Lors de l'importation de matplotlib, j'obtiendrais l'erreur suivante:

>>> import matplotlib as mpl

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

Lorsque vous tracez quelque chose comme ceci:

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

Un écran de figure apparaîtrait mais aucun graphique n'apparaît. en utilisant:

plt.show(block=True)

affiche correctement le graphique.

Bastiaan
la source
1

Dans mon cas, je voulais faire ce qui suit:

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

Suite à un mélange des solutions ici, ma solution était d'ajouter avant cela les commandes suivantes:

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

avec les deux importations suivantes

   import matplotlib
   import matplotlib.pyplot as plt

Il semble que toutes les commandes soient nécessaires dans mon cas, avec un MBP avec ElCapitan et PyCharm 2016.2.3. Salutations!

Marc Torrellas
la source
1

Dans un environnement non interactif, nous devons utiliser plt.show (block = True)

tkr_in
la source
1

Pour ceux qui exécutent un script dans un IDE (et ne fonctionnent pas dans un environnement interactif tel qu'une console python ou un notebook), j'ai trouvé que c'était la solution la plus intuitive et la plus simple:

plt.imshow(img)
plt.waitforbuttonpress()

Il montre la figure et attend que l'utilisateur clique sur la nouvelle fenêtre. Ce n'est qu'alors qu'il reprend le script et exécute le reste du code.

Azim
la source
1

J'ai pu obtenir une combinaison de certaines des autres suggestions ici fonctionnant pour moi, mais seulement en basculant le plt.interactive(False)vers Trueet inversement.

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

Cela fera apparaître mes intrigues. Puis paramétrer sur Falseautorisé pour la visualisation.

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

Comme indiqué également, mon programme ne se fermait pas tant que toutes les fenêtres n'étaient pas fermées. Voici quelques détails sur mon environnement d'exécution actuel:

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
la source
0

Une propriété doit être définie pour 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
la source
0

Remplacez l'importation par:

import matplotlib.pyplot as plt

ou utilisez cette ligne:

plt.pyplot.show()
Mise
la source
0

J'utilise Ubuntu et j'ai essayé comme @Arie l'a dit ci-dessus mais avec cette ligne uniquement dans le terminal:

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

Et ça a marché!

Farouk Fadly
la source
0

Dans Pycharm, parfois le Matplotlib.plot n'apparaîtra pas.

Donc, après avoir appelé, plt.show()vérifiez dans la barre d'outils de droite pour SciView. Dans SciView, tous les tracés générés seront stockés.

DAVIS BENNY 15MIS0426
la source
0

J'étais face à l'erreur ci-dessus lorsque j'essaie de tracer l'histogramme et les points ci-dessous ont fonctionné pour moi.

Système d'exploitation: Mac Catalina 10.15.5

Version Pycharm: version communautaire 2019.2.3

Version Python: 3.7

  1. J'ai changé la déclaration d'importation comme ci-dessous (de - à)

de :

import matplotlib.pylab as plt

à:

import matplotlib.pyplot as plt

  1. et tracer l'instruction ci-dessous (changé ma forme de commande pyplot en plt)

de:

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

à :

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. utilisez plt.show pour afficher l'histogramme

plt.show()

Tapan Hegde
la source