Pycharm ne montre pas l'intrigue 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()
En réalité, une fenêtre apparaît pendant moins d'une seconde, puis disparaît à nouveau.
Utilisation du Pyzo IEP IDE (avec le même interpréteur) sur le même code que le tracé montre comme prévu.
... Donc, le problème doit être avec certains réglages sur Pycharm. J'ai essayé d'utiliser python.exe et pythonw.exe comme interpréteur, 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)]'}
J'ai eu le même problème. Vérifiez si plt.isinteractive()
est True. Le paramétrer sur 'Faux' m'a aidé.
plt.interactive(False)
Juste utiliser
plt.show()
Ça fait l'affaire, mais je ne sais pas pourquoi.
Je me rends compte que c'est vieux, mais je me suis dit que j'éclaircirais une idée fausse pour les autres voyageurs. Le réglage de plt.pyplot.isinteractive()
sur False
signifie que le tracé sera dessiné sur des commandes spécifiques à dessiner (c'est-à-dire plt.pyplot.show()
). Régler plt.pyplot.isinteractive()
sur True
signifie que chaque commande pyplot
(plt
) déclenchera une commande de tirage (c'est-à-dire 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 remarque, vous pouvez raccourcir un peu ces instructions en utilisant la commande d'importation suivante import matplotlib.pyplot as plt
plutôt que matplotlib as plt
.
J'ai essayé différentes solutions mais ce qui a finalement fonctionné pour moi, c'est plt.show(block=True)
. Vous devez ajouter cette commande après la commande myDataFrame.plot()
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.
import matplotlib
matplotlib.use('TkAgg')
Travaille pour moi. (PyCharm/OSX)
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()
Je teste dans ma version de Pycharm (Community Edition 2017.2.2), vous devrez peut-être annoncer 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)
Avec moi, le problème était 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:
Ajoutez simplement plt.pyplot.show()
, ce serait bien.
La meilleure solution consiste à désactiver SciView.
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. Les autres scripts ne seront pas exécutés tant que la fenêtre n’est pas fermée.
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)
Mon env: macOS & anaconda3
Cela fonctionne pour moi:
matplotlib.use('macosx')
ou mode interactif:
matplotlib.use('TkAgg')
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()
Après 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!
Pour les débutants, vous voudrez peut-être aussi vous assurer que vous utilisez exécutez votre script dans la console , et non en tant que code Python normal. Il est assez facile de mettez en surbrillance un morceau de code et exécutez-le .
J'ai pu combiner certaines des autres suggestions ici, mais uniquement en basculant la plt.interactive(False)
en True
et en revenant.
plt.interactive(True)
plt.pyplot.show()
Cela fera clignoter les ma parcelles. Ensuite, le réglage sur False
a été autorisé.
plt.interactive(False)
plt.pyplot.show()
Comme indiqué, mon programme ne se terminera pas tant que toutes les fenêtres ne seront 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
Le commentaire du DanT a corrigé cela pour moi, matplotlib avec pycharm sur 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 traitez quelque chose comme ceci:
from matplotlib import pyplot as plt
plt.figure()
plt.plot(1,2)
plt.show()
Un écran de figure apparaîtra mais aucun graphique n'apparaîtra. en utilisant:
plt.show(block=True)
affiche le graphique correctement.
Dans env non-interactive, nous devons utiliser plt.show (block = True)
Aucune des solutions ci-dessus n'a fonctionné pour moi, à l'exception des suivantes:
settings > Tools > Python Scientific
.J'ai reçu l'erreur No PyQt5 module found
. Avancé avec l'installation de PyQt5
en utilisant:
Sudo apt-get install python3-pyqt5
J'utilise Ubuntu et j'ai essayé comme l'a dit @Arie 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é!
Changer l'importation en:
import matplotlib.pyplot as plt
ou utilisez cette ligne:
plt.pyplot.show()
ne 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()
Pour ceux qui exécutent un script dans un IDE (et ne travaillent pas dans un environnement interactif tel qu'une console python ou un ordinateur portable), j'ai trouvé qu'il s'agissait du plus intuitif et solution 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.