web-dev-qa-db-fra.com

Pycharm ne montre pas l'intrigue

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

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)
32
DanT

Juste utiliser

plt.show()

Ça fait l'affaire, mais je ne sais pas pourquoi.

66
Amit Lohan

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.

48
user3915686

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.

26
import matplotlib
matplotlib.use('TkAgg')

Travaille pour moi. (PyCharm/OSX)

17
Joe Bobson

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

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)
11
tairen

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:

  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.
5
Arie

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

La meilleure solution consiste à désactiver SciView.

5
Taki Guan

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.

5
Sudeep K Rana

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)
3
m4ndy

Mon env: macOS & anaconda3

Cela fonctionne pour moi:

matplotlib.use('macosx')

ou mode interactif:

matplotlib.use('TkAgg')
2
Zoe L

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!

1
Marc Torrellas

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
1
Nathan W

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.

1
Bastiaan

Dans env non-interactive, nous devons utiliser plt.show (block = True)

1
tkr_in

Aucune des solutions ci-dessus n'a fonctionné pour moi, à l'exception des suivantes:

  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. Avancé avec l'installation de PyQt5 en utilisant:

    Sudo apt-get install python3-pyqt5
    
1
AbdulRehmanLiaqat

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é!

0
Farouk Fadly

Changer l'importation en:

import matplotlib.pyplot as plt

ou utilisez cette ligne:

plt.pyplot.show()
0
Mise

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()
0
Nilesh Shinde

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.

0
Azim