Pycharm no muestra la trama


100

Pycharm no muestra la trama del siguiente código:

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

Lo que sucede es que aparece una ventana durante menos de un segundo y luego vuelve a desaparecer.

Usando el Pyzo IEP IDE (usando el mismo intérprete) en el mismo código, el gráfico muestra como se esperaba.

... Entonces, el problema debe estar con alguna configuración en Pycharm. Intenté usar python.exe y pythonw.exe como intérprete, ambos con los mismos resultados.

Este es mi 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
hace plt.pyplot.show()el trabajo?
Padraic Cunningham

1
No es asi. Cuando se ejecuta exactamente 'plt.pyplot.show ()' no funciona. ¿Debo escribir algo más en lugar de 'pyplot'? (novato aquí).
Rasmus Larsen

¿Qué sucede cuando ejecuta el código en pycharm?
Padraic Cunningham

Cuando ejecuto el archivo sucede lo mismo: una ventana aparece y desaparece rápidamente, impresión de consola: Proceso terminado con el código de salida 0. Cuando lo envío a la consola, la ventana aparece y permanece pero no se dibuja nada en la ventana, solo es blanca. La etiqueta de la ventana es "Figura 1 (No responde)"
Rasmus Larsen

Debe agregar matplotlib.pyplot para visualizarlo. Consulte: stackoverflow.com/a/29042575/4989929
Ronak Poriya

Respuestas:


103

Solo usa

plt.show()

Este comando le dice al sistema que dibuje el diagrama en Pycharm.

Ejemplo:

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

4
Es realmente asombroso, esto funcionó para mí, y ninguno de los otros lo hizo. Lo sorprendente es que no necesitaba plt.show () en Jupyter Notebook, no sé por qué el comportamiento es diferente en PyCharm
Ambareesh

igual que aquí. No lo necesitaba en Jupyter Notebook
pooria

Siempre me olvido de llamar a eso también. Esto le dice al sistema que realmente lo dibuje en pycharm. Notebook llamará automáticamente a las funciones de dibujo e impresión de forma predeterminada. Creo que fue hecho así para una creación de prototipos más rápida.
MNM

¿Qué sucede si necesito usar plt.draw()ya que actualizo la figura más adelante? plt.show()funciona bien, pero plt.draw()no muestra nada en PyCharm.
CGFoX

1
Podría ser que no lo necesite en los cuadernos porque hizo algo como esto %matplotlib inline. @CGFox, dibujar está destinado explícitamente a representar en la memoria pero no a mostrar en la pantalla (o archivo). Necesita plt.pause (0.1) para que se muestren los gráficos, o llame a plt.show (pause = True) en algún otro punto del código para que se
procesen

54

Me doy cuenta de que esto es antiguo, pero pensé que aclararía un concepto erróneo para otros viajeros. Establecer plt.pyplot.isinteractive()en Falsesignifica que la trama se dibujará con comandos específicos para dibujar (es decir plt.pyplot.show()). Establecer plt.pyplot.isinteractive()en Truesignifica que cada comando pyplot( plt) activará un comando de dibujo (es decir plt.pyplot.show()). Entonces, lo que probablemente estaba buscando es plt.pyplot.show()al final de su programa para mostrar el gráfico.

Como nota al margen, puede acortar un poco estas declaraciones utilizando el siguiente comando de importación en import matplotlib.pyplot as pltlugar de matplotlib as plt.


14
Agregar plt.show (block = True) al final de mi función es lo que funcionó para mí. Gracias por la aclaración. (Python 3.x, PyCharm 2016.1.4, Ubuntu)
SummerEla

Esto es lo que funciona para mí (Python 2.7, Pycharm 2016.3, Ubuntu 16.04): "import matplotlib.pyplot as plt", luego la función trazar desde DataFrame como en "corr_data [col] .plot (kind =" bar ", figsize = (8, 5), grid = True, color = "r", title = col) "y antes de salir de la función," plt.show () "
Taka

34

Yo tuve el mismo problema. Compruebe si plt.isinteractive()es cierto. Establecerlo en 'Falso' me ayudó.

plt.interactive(False)

9
Llamar a plt.show (block = True) me ayudó a mostrar el gráfico una vez. Pero la consola se bloqueó incluso después de cerrar la ventana de gráficos.
DanT

plt.interactive (Falso) lo hizo por mí en PyCharm
fantabolous

Ya no tengo Python instalado, así que no sé si funcionaría para mí, pero como funciona para otros, aceptaré esta respuesta (espero que esto sea correcto de acuerdo con las reglas de stackoverflow)
Rasmus Larsen

8
La solución correcta es configurar plt.show (block = True) como @charlie ha sugerido a continuación. Después de agregar esta línea, el valor de la bandera plt.interactive () no tiene relación con el gráfico que se muestra.
congelación

Esto no funcionó para mí `para cluster_id in range (len (tempx [0])): plt.plot (tempx, tempy, 'rx--', markersize = 8) plt.legend (loc = 4, framealpha = 0.5) plt.interactive (Falso) plt.show (block = True) `
Mona Jalal

29

Probé diferentes soluciones, pero lo que finalmente funcionó para mí fue plt.show(block=True). Debe agregar este comando después del myDataFrame.plot()comando para que esto surta efecto. Si tiene un gráfico múltiple, simplemente agregue el comando al final de su código. Le permitirá ver todos los datos que está trazando.


2
Esto lo hizo por mí. Debería ser la respuesta aceptada. Jugar con el plt.interactive () no hizo nada
congelación

Estoy de acuerdo porque esto también me ayudó. Establecer el modo interactivo en Falso y agregar "DISPLAY = TRUE" a las variables de entorno no ayudó.
Fábio

22
import matplotlib
matplotlib.use('TkAgg')

Funciona para mi. (PyCharm / OSX)


Esto también me ha funcionado en Windows 10 cuando ya plt.show()no me ayudó en una versión más nueva de PyCharm (2020.1).
Corbie

14

Probé en mi versión de Pycharm (Community Edition 2017.2.2), es posible que deba anunciar tanto plt.interactive (False) como plt.show (block = True) de la siguiente manera:

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)

lamento escuchar eso. Encuentro que también funciona en Pycharm 2017.3 (edición comunitaria). ¿Puede intentar utilizar una nueva versión de Pycharm?
tairen

Hola, Saria, lo siento. Lo pruebo en mi Pycharm 2018.1.2 (edición comunitaria) con el sistema operativo Ubuntu. Funciona tambien.
tairen

Hola, funciona para Pycharm 2019.3 con MacOs Catalina
Milad nourizade

13

He encontrado una solución. Esto funcionó para mí:

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

Pero ahora me enfrento a un nuevo problema. Una vez que el gráfico se genera en una nueva ventana, el nuevo código que agregué después de que el gráfico no se ejecuta, hasta que cierre la ventana recién abierta.
Dhruv

2
La línea importante que faltaba en la pregunta es plt.show ()
Yoav

6

Poco después de llamar

plt.imshow() 

llamada

plt.show(block = True)

Obtendrá la ventana emergente matplotlib con la imagen.

Esta es una forma de bloqueo. La secuencia de comandos adicional no se ejecutará hasta que se cierre la ventana emergente.


Esto es lo que estaba buscando.
NelsonGon

5

Para mí, el problema era el hecho de que matplotlib estaba usando el backend incorrecto. Estoy usando Debian Jessie.

En una consola hice lo siguiente:

import matplotlib
matplotlib.get_backend()

El resultado fue: 'agg', mientras que este debería ser 'TkAgg'.

La solución fue simple:

  1. Desinstalar matplotlib a través de pip
  2. Instale las bibliotecas apropiadas: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. Instale matplotlib a través de pip nuevamente.

5

Solo agregue plt.pyplot.show(), eso estaría bien.

La mejor solución es deshabilitar SciView.


4

Probé en mi versión en PyCharm 2017.1.2. Usé interactivo (Verdadero) y mostrar (bloque = Verdadero).

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

Ninguno de los anteriores funcionó para mí, pero lo siguiente sí:

  1. Desactive la casilla de verificación (Mostrar gráficos en la ventana de herramientas) en pycharm settings > Tools > Python Scientific.

  2. Recibí el error No PyQt5 module found. Siguió adelante con la instalación de PyQt5usar:

    sudo apt-get install python3-pyqt5

Tenga en cuenta que para algunos solo el primer paso es suficiente y funciona.


1
Por favor, aclare que el primer paso aún podría ser la solución, ya que funcionó para mí. Dicho así, la otra respuesta repetida de @ amir1122 tiene derecho a existir. Lo cual también está bien, por supuesto, y todavía tienes mi voto a favor.
Lorenz

1
@Lorenz. Actualizado de acuerdo con su sugerencia, lo que tiene sentido.
AbdulRehmanLiaqat

El paso 1 funciona, pero parece una solución alternativa. Sospecho que en mi caso es porque tengo varias versiones de Python (3.6, 3.7 y 3.8) flotando.
Josiah Yoder

2

Mi env: macOS y anaconda3

Esto funciona para mi:

matplotlib.use('macosx')

o modo interactivo:

matplotlib.use('TkAgg')

Agregue esto antes de importar matplotlib.pyplot
Zoe L

2

Tuve este problema y pude resolverlo, puedes probar a mi manera ... deshabilita "mostrar gráficos en la ventana de herramientas" desde la configuración -> herramientas -> Python Scientific


1
Esta respuesta ya se proporcionó hace dos años (por ejemplo, en stackoverflow.com/a/52221178/466862 ). Cuando responda preguntas anteriores, asegúrese de responder una solución nueva y diferente o una explicación significativamente mejor.
Mark Rotteveel

Esto repite la respuesta de @ AbdulRehmanLiaqat, pero al menos establece claramente que esta puede ser una posible solución. Primero voté en contra debido a la repetición. Ahora voté a favor, simplemente porque la otra respuesta no dice claramente que este solo paso aquí ya puede resolverlo, sino que menciona un error después que no apareció en mi caso.
Lorenz

1

El comentario de DanT solucionó esto para mí, matplotlib con pycharm en Linux con el backend GTKagg. Al importar matplotlib obtendría el siguiente error:

>>> import matplotlib as mpl

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

Al trazar algo así:

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

Aparecerá una pantalla de figuras pero no aparecerán gráficos. utilizando:

plt.show(block=True)

muestra el gráfico correctamente.


1

En mi caso, quería hacer lo siguiente:

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

Siguiendo una combinación de las soluciones aquí, mi solución fue agregar antes de eso los siguientes comandos:

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

con las siguientes dos importaciones

   import matplotlib
   import matplotlib.pyplot as plt

Parece que todos los comandos son necesarios en mi caso, con un MBP con ElCapitan y PyCharm 2016.2.3. ¡Saludos!



1

En env no interactivo, tenemos que usar plt.show (block = True)


1

Para aquellos que ejecutan un script dentro de un IDE (y no trabajan en un entorno interactivo como una consola de Python o un portátil), encontré que esta es la solución más intuitiva y simple:

plt.imshow(img)
plt.waitforbuttonpress()

Muestra la figura y espera hasta que el usuario haga clic en la nueva ventana. Solo entonces reanuda el script y ejecuta el resto del código.


1

Pude obtener una combinación de algunas de las otras sugerencias aquí que funcionaron para mí, pero solo mientras alternaba plt.interactive(False)entre sí Truey viceversa.

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

Esto mostrará mis parcelas. Luego, establezca para Falsepermitir la visualización.

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

Como se señaló también, mi programa no se cerraría hasta que todas las ventanas estuvieran cerradas. Aquí hay algunos detalles sobre mi entorno de ejecución actual:

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

Es necesario establecer una propiedad para 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

Cambiar la importación a:

import matplotlib.pyplot as plt

o usa esta línea:

plt.pyplot.show()

0

Estoy usando Ubuntu e intenté como @Arie dijo anteriormente pero con esta línea solo en la terminal:

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

¡Y funcionó!


0

En Pycharm, a veces el Matplotlib.plot no aparece.

Entonces, después de llamar, plt.show()verifique en la barra de herramientas del lado derecho para SciView. Dentro de SciView se almacenarán todos los gráficos generados.


0

Me enfrentaba al error anterior cuando trato de trazar un histograma y los puntos inferiores funcionaron para mí.

Sistema operativo: Mac Catalina 10.15.5

Versión de Pycharm: versión comunitaria 2019.2.3

Versión de Python: 3.7

  1. Cambié la declaración de importación como se muestra a continuación (de - a)

de :

import matplotlib.pylab as plt

a:

import matplotlib.pyplot as plt

  1. y trazar la declaración a continuación (cambié mi formulario de comando pyplot a 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") 

a :

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. use plt.show para mostrar el histograma

plt.show()

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.