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)]'}
Rasmus Larsen
fuente
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()
Amit Lohan
fuente
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.

user3915686
fuente
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)
DanT
fuente
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.

Charlie Armstrong
fuente
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)

Joe Bobson
fuente
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)
tairen
fuente
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()
Dhruv
fuente
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.

Sudeep K Rana
fuente
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.
Arie
fuente
5

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

La mejor solución es deshabilitar SciView.

Taki Guan
fuente
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)
m4ndy
fuente
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.

AbdulRehmanLiaqat
fuente
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')
Zoe L
fuente
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

amir1122
fuente
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.

Bastiaan
fuente
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!

Marc Torrellas
fuente
1

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

tkr_in
fuente
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.

Azim
fuente
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
Nathan W
fuente
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()
Nilesh Shinde
fuente
0

Cambiar la importación a:

import matplotlib.pyplot as plt

o usa esta línea:

plt.pyplot.show()
Mise
fuente
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ó!

Farouk Fadly
fuente
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.

DAVIS BENNY 15MIS0426
fuente
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()

Tapan Hegde
fuente