Pycharm non mostra la trama


100

Pycharm non mostra la trama dal seguente codice:

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

Quello che succede è che una finestra appare per meno di un secondo e poi scompare di nuovo.

Utilizzando l'IDE Pyzo IEP (utilizzando lo stesso interprete) sullo stesso codice, il grafico mostra come previsto.

... Quindi il problema deve essere con alcune impostazioni su Pycharm. Ho provato a utilizzare sia python.exe che pythonw.exe come interprete entrambi con gli stessi risultati.

Questo è il mio 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
fa plt.pyplot.show()il lavoro?
Padraic Cunningham

1
Non è così. Quando si esegue esattamente 'plt.pyplot.show ()' non funziona. Devo scrivere qualcos'altro invece di "pyplot"? (noob qui).
Rasmus Larsen

cosa succede quando esegui il codice in pycharm?
Padraic Cunningham

Quando eseguo il file accade la stessa cosa: una finestra appare e scompare rapidamente, stampa dalla console: Processo terminato con il codice di uscita 0. Quando lo invio alla console, la finestra appare e rimane ma non viene disegnato nulla nella finestra, è solo bianca. L'etichetta della finestra è "Figure 1 (Not Responding)"
Rasmus Larsen

Si dovrebbe aggiungere matplotlib.pyplot a visulize it.Refer: stackoverflow.com/a/29042575/4989929
Ronak Poriya

Risposte:


103

Basta usare

plt.show()

Questo comando dice al sistema di disegnare la trama in Pycharm.

Esempio:

plt.imshow(img.reshape((28, 28)))
plt.show()

4
È davvero incredibile - questo ha funzionato per me, e nessuno degli altri ha funzionato. Ciò che è stato sorprendente è che non avevo bisogno di plt.show () in Jupyter Notebook, non so perché il comportamento è diverso in PyCharm
Ambareesh

anch'io. Non ne avevo bisogno in Jupyter Notebook
pooria

Mi dimentico sempre di chiamare anche quello. Questo dice al sistema di disegnarlo effettivamente in pycharm. Notebook richiamerà automaticamente le funzioni di disegno e stampa per impostazione predefinita. Penso che sia stato realizzato in questo modo per una prototipazione più rapida.
MNM

Cosa succede se devo usare plt.draw()dato che aggiorno la figura in seguito? plt.show()funziona bene, ma plt.draw()non mostra nulla in PyCharm.
CGFoX

1
Potrebbe essere che non ne hai bisogno nei quaderni perché hai fatto qualcosa del genere %matplotlib inline. @CGFox, draw è inteso esplicitamente per il rendering in memoria ma non per la visualizzazione sullo schermo (o sul file). È necessario plt.pause (0.1) per mostrare i grafici, o chiamare plt.show (pause = True) in un altro punto del codice per farli eseguire il rendering
xaviersjs

54

Mi rendo conto che questo è vecchio, ma ho pensato di chiarire un malinteso per altri viaggiatori. L'impostazione plt.pyplot.isinteractive()su Falsesignifica che il grafico verrà disegnato su specifici comandi da disegnare (cioè plt.pyplot.show()). L'impostazione plt.pyplot.isinteractive()su Truesignifica che ogni comando pyplot( plt) attiverà un comando di disegno (cioè plt.pyplot.show()). Quindi quello che stavi cercando più che probabilmente è plt.pyplot.show()alla fine del tuo programma per visualizzare il grafico.

Come nota a margine puoi abbreviare un po 'queste istruzioni usando il seguente comando di importazione import matplotlib.pyplot as pltinvece di matplotlib as plt.


14
L'aggiunta di plt.show (block = True) alla fine della mia funzione è ciò che ha funzionato per me. Grazie per il chiarimento. (Python 3.x, PyCharm 2016.1.4, Ubuntu)
SummerEla

Questo è ciò che funziona per me (Python 2.7, Pycharm 2016.3, Ubuntu 16.04): "import matplotlib.pyplot as plt", quindi il grafico della funzione da DataFrame come in "corr_data [col] .plot (kind =" bar ", figsize = (8, 5), grid = True, color = "r", title = col) "e prima di lasciare la funzione," plt.show () "
Taka

34

Ho avuto lo stesso problema. Controlla se plt.isinteractive()è vero. Impostarlo su "False" mi ha aiutato.

plt.interactive(False)

9
Chiamare plt.show (block = True) mi ha aiutato a mostrare il grafico una volta. Ma la console è stata bloccata anche dopo aver chiuso la finestra dei grafici.
DanT

plt.interactive (False) lo ha fatto per me in PyCharm
fantabolous

Non ho più installato Python, quindi non so se funzionerebbe per me, ma dal momento che funziona per altri accetterò questa risposta (spero che sia corretta secondo le regole dello stackoverflow)
Rasmus Larsen

8
La soluzione corretta è impostare plt.show (block = True) come @charlie ha suggerito di seguito. Dopo aver aggiunto questa riga, il valore del flag plt.interactive () non ha avuto alcuna relazione con il grafico visualizzato.
congelamento

Questo non ha funzionato per me `per cluster_id nell'intervallo (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

Ho provato diverse soluzioni ma quello che alla fine ha funzionato per me è stato plt.show(block=True). È necessario aggiungere questo comando dopo il myDataFrame.plot()comando affinché abbia effetto. Se hai più grafici, aggiungi il comando alla fine del codice. Ti permetterà di vedere tutti i dati che stai tracciando.


2
Questo ha fatto per me. Dovrebbe essere la risposta accettata. Pasticciare con plt.interactive () non ha fatto nulla
congelamento

Sono d'accordo perché anche questo mi ha aiutato. L'impostazione della modalità interattiva su False e l'aggiunta di "DISPLAY = TRUE" alle variabili d'ambiente non ha aiutato.
Fábio

22
import matplotlib
matplotlib.use('TkAgg')

Per me va bene. (PyCharm / OSX)


Questo ha funzionato anche per me su Windows 10 quando plt.show()non è stato più utile in una versione più recente di PyCharm (2020.1).
Corbie

14

Provo nella mia versione di Pycharm (Community Edition 2017.2.2), potresti dover annunciare sia plt.interactive (False) che plt.show (block = True) come segue:

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)

mi dispiace sentirlo. Trovo che funzioni anche in Pycharm 2017.3 (community edition). Puoi provare a utilizzare una nuova versione di Pycharm?
tairen

Ciao, Saria, scusa per questo. Lo provo nel mio Pycharm 2018.1.2 (community edition) con sistema operativo Ubuntu. Funziona anche.
tairen

Salve, funziona per Pycharm 2019.3 con MacOs Catalina
Milad nourizade

13

Ho trovato una soluzione. Questo ha funzionato per me:

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

Ma ora sto affrontando un nuovo problema. Una volta che il grafico viene generato in una nuova finestra, il nuovo codice che ho aggiunto dopo il grafico non viene eseguito, fino a quando non chiudo la finestra appena aperta.
Dhruv

2
La riga importante che mancava nella domanda è plt. Spettacolo ()
Yoav

6

Subito dopo aver chiamato

plt.imshow() 

chiamata

plt.show(block = True)

Otterrai il popup matplotlib con l'immagine.

Questo è un modo di blocco. L'ulteriore script non verrà eseguito fino alla chiusura del pop.


Questo è quello che stavo cercando.
NelsonGon

5

Con me il problema era il fatto che matplotlib stava usando il backend sbagliato. Sto usando Debian Jessie.

In una console ho fatto quanto segue:

import matplotlib
matplotlib.get_backend()

Il risultato è stato: "agg", mentre dovrebbe essere "TkAgg".

La soluzione era semplice:

  1. Disinstallare matplotlib tramite pip
  2. Installa le librerie appropriate: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. Installa nuovamente matplotlib tramite pip.

5

Aggiungi solo plt.pyplot.show()che andrebbe bene.

La soluzione migliore è disabilitare SciView.


4

Ho provato nella mia versione su PyCharm 2017.1.2. Ho usato interattivo (True) e 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)

4

Nessuno dei precedenti ha funzionato per me, ma il seguente ha funzionato:

  1. Disattiva la casella di controllo (Mostra grafici nella finestra degli strumenti) in pycharm settings > Tools > Python Scientific.

  2. Ho ricevuto l'errore No PyQt5 module found. È andato avanti con l'installazione PyQt5dell'utilizzo di:

    sudo apt-get install python3-pyqt5

Attenzione che per alcuni solo il primo passo è sufficiente e funziona.


1
Per favore chiarisci che il primo passo potrebbe ancora essere la soluzione, poiché ha funzionato per me. Detto in questo modo, l'altra risposta ripetuta di @ amir1122 ha il diritto di esistere. Anche il che va bene, ovviamente, e hai ancora il mio voto positivo.
Lorenz

1
@ Lorenz. Aggiornato in base al tuo suggerimento che ha senso.
AbdulRehmanLiaqat

Il passaggio 1 funziona, ma sembra una soluzione alternativa. Sospetto che nel mio caso sia perché ho più versioni di Python (3.6, 3.7 e 3.8) in giro.
Josiah Yoder

2

Il mio env: macOS e anaconda3

Questo funziona per me:

matplotlib.use('macosx')

o modalità interattiva:

matplotlib.use('TkAgg')

Aggiungi questo prima di importare matplotlib.pyplot
Zoe L

2

ho avuto questo problema e potrei risolverlo, puoi testare a modo mio .. disabilita "mostra grafici nella finestra degli strumenti" dalle impostazioni -> strumenti -> python scientific


1
Questa risposta era già stata fornita due anni fa (ad esempio in stackoverflow.com/a/52221178/466862 ). Quando rispondi a domande meno recenti, assicurati di rispondere a una nuova soluzione diversa o a una spiegazione notevolmente migliore.
Mark Rotteveel il

Questo sta ripetendo la risposta di @ AbdulRehmanLiaqat, ma almeno afferma chiaramente che questa può essere una possibile soluzione. Per prima cosa ho svalutato questo a causa della ripetizione. Ora ho votato in più, semplicemente perché l'altra risposta non afferma chiaramente che questo singolo passaggio qui può già risolverlo, invece menziona un errore successivo che non è apparso nel mio caso.
Lorenz

1

Il commento di DanT ha risolto questo problema per me, matplotlib con pycharm su Linux con il backend GTKagg. Dopo aver importato matplotlib otterrei il seguente errore:

>>> import matplotlib as mpl

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

Quando si traccia qualcosa di simile:

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

Verrà visualizzata una schermata delle cifre ma non verranno visualizzati grafici. utilizzando:

plt.show(block=True)

visualizza correttamente il grafico.


1

Nel mio caso, volevo fare quanto segue:

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

Seguendo un mix delle soluzioni qui, la mia soluzione è stata quella di aggiungere prima i seguenti comandi:

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

con le seguenti due importazioni

   import matplotlib
   import matplotlib.pyplot as plt

Sembra che tutti i comandi siano necessari nel mio caso, con un MBP con ElCapitan e PyCharm 2016.2.3. Saluti!



1

In env non interattivo, dobbiamo usare plt.show (block = True)


1

Per coloro che eseguono uno script all'interno di un IDE (e non lavorano in un ambiente interattivo come una console python o un notebook), ho trovato questa la soluzione più intuitiva e più semplice:

plt.imshow(img)
plt.waitforbuttonpress()

Mostra la figura e attende finché l'utente non fa clic sulla nuova finestra. Solo allora riprende lo script ed esegue il resto del codice.


1

Sono stato in grado di ottenere una combinazione di alcuni degli altri suggerimenti qui che lavorano per me, ma solo mentre portando l' plt.interactive(False)ad Truee viceversa.

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

Questo farà lampeggiare le mie trame. Quindi impostare su Falseconsentito per la visualizzazione.

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

Come notato anche il mio programma non si chiudeva finché tutte le finestre non venivano chiuse. Ecco alcuni dettagli sul mio attuale ambiente di corsa:

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

Una proprietà deve essere impostata per 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

Cambia importazione in:

import matplotlib.pyplot as plt

oppure usa questa linea:

plt.pyplot.show()

0

Sto usando Ubuntu e ho provato come @Arie ha detto sopra ma con questa riga solo nel terminale:

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

E ha funzionato!


0

In Pycharm, a volte il Matplotlib.plot non viene visualizzato.

Quindi, dopo aver chiamato il plt.show()controllo nella barra degli strumenti sul lato destro per SciView. All'interno di SciView verranno archiviati tutti i grafici generati.


0

Stavo affrontando l'errore di cui sopra quando cerco di tracciare l'istogramma e sotto i punti hanno funzionato per me.

Sistema operativo: Mac Catalina 10.15.5

Versione Pycharm: versione comunitaria 2019.2.3

Versione Python: 3.7

  1. Ho cambiato la dichiarazione di importazione come di seguito (da - a)

a partire dal :

import matplotlib.pylab as plt

per:

import matplotlib.pyplot as plt

  1. e la dichiarazione di trama in basso (cambiato il mio modulo di comando pyplot in plt)

a partire dal:

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

per :

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. usa plt. mostra per visualizzare l'istogramma

plt.show()

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.