皮查姆不显示情节


100

Pycharm不显示以下代码中的图:

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

发生的是,一个窗口出现了不到一秒钟,然后又消失了。

在图表显示的相同代码上使用Pyzo IEP IDE(使用相同的解释程序)。

...所以问题一定出在Pycharm上。我试过使用python.exe和pythonw.exe作为解释器,两者的结果相同。

这是我的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
plt.pyplot.show()工作?
Padraic Cunningham 2014年

1
它不是。完全运行“ plt.pyplot.show()”时,它不起作用。我应该写别的东西代替“ pyplot”吗?(这里的菜鸟)。
Rasmus Larsen 2014年

在pycharm中运行代码会怎样?
Padraic Cunningham 2014年

当我运行文件时,发生了同样的事情:一个窗口迅速出现并消失,控制台打印:进程退出代码为0。当我将其发送到控制台时,该窗口出现并停留,但窗口中没有任何内容,只是白色。窗口的标签为“图1(无响应)”
Rasmus Larsen 2014年

您应该添加matplotlib.pyplot对其进行可视化。请参阅:stackoverflow.com/a/29042575/4989929
Ronak Poriya

Answers:


103

只需使用

plt.show()

此命令告诉系统在Pycharm中绘制图。

例:

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

4
真的很棒-这对我有用,其他人都没有。令人惊讶的是,我在Jupyter Notebook中不需要plt.show(),不知道为什么PyCharm中的行为有所不同
Ambareesh

同样在这里。我并不需要它Jupyter笔记本
pooria

我总是忘记也这么称呼。这告诉系统实际上将其绘制在pycharm中。默认情况下,Notebook将自动调用绘图和打印功能。我认为这样做是为了加快原型制作速度。
MNM

如果plt.draw()以后要更新该图,需要使用该怎么办?plt.show()工作正常,但plt.draw()在PyCharm中不显示任何内容。
CGFoX

1
可能是因为您做了类似的事情而在笔记本中不需要它%matplotlib inline。@ CGFox,draw是指显式渲染到内存,但不显示在屏幕(或文件)上。您需要plt.pause(0.1)来显示图,或者在代码中的其他地方调用plt.show(pause = True)来渲染图
xaviersjs,

54

我意识到这很古老,但我想我会为其他旅客消除误解。设置plt.pyplot.isinteractive()False意味着将在特定绘制命令(即plt.pyplot.show())上绘制该图。设置plt.pyplot.isinteractive()True意味着每个pyplotplt)命令将触发绘制命令(即plt.pyplot.show())。因此,您最有可能要寻找的是plt.pyplot.show()在程序结尾处显示图形。

另外,您可以使用以下import命令(import matplotlib.pyplot as plt而不是)来缩短这些语句matplotlib as plt


14
在我的函数末尾添加plt.show(block = True)对我有用。谢谢你的澄清。(Python 3.x,PyCharm 2016.1.4,Ubuntu)
SummerEla 2016年

这对我有用(Python 2.7,Pycharm 2016.3,Ubuntu 16.04):“将matplotlib.pyplot导入为plt”,然后从DataFrame中绘制函数图,例如“ corr_data [col] .plot(kind =“ bar”,figsize = (8,5),grid = True,color =“ r”,title = col)“,并在离开函数“ plt.show()”之前
Taka

34

我有同样的问题。检查是否plt.isinteractive()为真。将其设置为“ False”对我有所帮助。

plt.interactive(False)

9
调用plt.show(block = True)有助于为我显示一次图表。但是,即使关闭了图表窗口,控制台仍被阻止。
DanT

plt.interactive(False)在PyCharm中为我做到了
惊人的2015年

我不再安装Python,所以我不知道它是否对我有用,但是因为它对其他人有用,所以我会接受这个答案(根据stackoverflow-rules,我希望这是正确的)
Rasmus Larsen

8
正确的解决方案是将plt.show(block = True)设置为@charlie在以下建议的位置。添加此行后,plt.interactive()标志的值与所显示的图无关。
冻伤

这对我不起作用`对于range(len(tempx [0]))中的cluster_id:plt.plot(tempx,tempy,'rx--',markersize = 8)plt.legend(loc = 4,framealpha = 0.5)plt.interactive(False)plt.show(block = True)`
蒙娜·贾拉勒

29

我尝试了不同的解决方案,但最终对我有用的是plt.show(block=True)。您需要在命令之后添加此命令,此myDataFrame.plot()命令才能生效。如果您有多个绘图,只需在代码末尾添加命令。它将允许您查看正在绘制的每个数据。


2
这为我做到了。应该是公认的答案。遇到plt.interactive()没做任何事情
冻伤了

我同意,因为这也对我有所帮助。将交互模式设置为False并向环境变量添加“ DISPLAY = TRUE”并没有帮助。
法比奥

22
import matplotlib
matplotlib.use('TkAgg')

为我工作。(PyCharm / OSX)


这在Windows 10上也对我plt.show()有用,但在较新版本的PyCharm(2020.1)中不再提供帮助时。
科比

14

我在Pycharm版本(社区版2017.2.2)中进行了测试,您可能需要同时声明plt.interactive(False)和plt.show(block = True),如下所示:

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)

很遗憾听到这个消息。我发现它也可以在Pycharm 2017.3(社区版)中使用。您可以尝试使用新版本的Pycharm吗?
泰伦

嗨,Saria,对此感到抱歉。我在使用Ubuntu OS的Pycharm 2018.1.2(社区版)中对其进行了测试。它也可以。
tairen

嗨,它与MacOs Catalina
Milad nourizade于

13

我找到了解决方案。这对我有用:

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

2
问题中缺少的重要一行是plt.show()
Yoav

6

致电后不久

plt.imshow() 

呼叫

plt.show(block = True)

您将获得带有图像的matplotlib弹出窗口。

这是一种阻止方式。在弹出窗口关闭之前,其他脚本将无法运行。


这就是我想要的。
NelsonGon

5

对于我来说,问题是matplotlib使用了错误的后端。我正在使用Debian Jessie。

在控制台中,我执行了以下操作:

import matplotlib
matplotlib.get_backend()

结果是:“ agg”,而应该是“ TkAgg”。

解决方案很简单:

  1. 通过pip卸载matplotlib
  2. 安装适当的库:sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. 再次通过pip安装matplotlib。

5

只需添加 plt.pyplot.show(),就可以了。

最好的解决方案是禁用SciView。


4

我在PyCharm 2017.1.2上的版本中进行了测试。我使用交互式(True)和显示(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

以上都不对我有用,但以下内容对我有用:

  1. 禁用pycharm中的复选框(在工具窗口中显示图)settings > Tools > Python Scientific

  2. 我收到了错误消息No PyQt5 module found。继续使用以下内容的安装PyQt5

    sudo apt-get install python3-pyqt5

请注意,仅第一步就足够了并且可以工作。


1
请更清楚地说明第一步仍然是解决方案,因为它对我有用。如此说来,@ amir1122的另一个重复答案有权存在。当然也可以,您仍然得到我的支持。
洛伦兹

1
@洛伦茨 根据您的建议进行了更新,这很有意义。
AbdulRehmanLiaqat

步骤1可行,但感觉像是一种解决方法。我怀疑是因为我有多个版本的Python(3.6、3.7和3.8)在浮动。
Josiah Yoder

2

我的环境:macOS和anaconda3

这对我有用:

matplotlib.use('macosx')

或互动模式:

matplotlib.use('TkAgg')

在导入matplotlib.pyplot之前添加此代码
Zoe L

2

我有这个问题,我可以解决,您可以测试一下自己的方法..从设置->工具-> python科学中禁用“在工具窗口中显示图”


1
这个答案已经在两年前提供了(例如在stackoverflow.com/a/52221178/466862中)。在回答较旧的问题时,请确保您回答新的,不同的解决方案或明显更好的解释。
Mark Rotteveel

这是重复@AbdulRehmanLiaqat的回答,但至少清楚地表明这可能是一种解决方案。由于重复,我首先对此表示反对。现在我投票赞成,仅仅是因为另一个答案不能清楚地表明此处的这一步骤已经可以解决问题,而是随后提到了一个错误,该错误在我的情况下没有出现。
洛伦兹

1

DanT的评论为我解决了这个问题,在带有GTKagg后端的linux上用pycharm修复了matplotlib。导入matplotlib时,我将得到以下错误:

>>> import matplotlib as mpl

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

当绘制这样的东西时:

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

将弹出一个图形屏幕,但没有图表出现。使用:

plt.show(block=True)

正确显示图形。


1

就我而言,我想执行以下操作:

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

在这里混合了各种解决方案之后,我的解决方案是在此之前添加以下命令:

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

以下两种进口

   import matplotlib
   import matplotlib.pyplot as plt

在我的情况下,似乎所有命令都是必需的,带有ElCapitan和PyCharm 2016.2.3的MBP。问候!



1

在非交互式环境中,我们必须使用plt.show(block = True)


1

对于那些在IDE内运行脚本(并且不能在python控制台或笔记本之类的交互式环境中工作)的人,我发现这是最直观,最简单的解决方案:

plt.imshow(img)
plt.waitforbuttonpress()

它显示了该图,并一直等到用户单击新窗口。只有这样,它才能恢复脚本并运行其余代码。


1

我能够得到这里的一些其他建议为我工作的组合,但只有当拨动plt.interactive(False)True,然后再返回。

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

这将刷新我的情节。然后设置为False允许查看。

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

如前所述,在关闭所有窗口之前,我的程序也不会退出。以下是有关当前运行环境的一些详细信息:

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

需要为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

将导入更改为:

import matplotlib.pyplot as plt

或使用此行:

plt.pyplot.show()

0

我正在使用Ubuntu,并且按上面的@Arie所述尝试过,但是仅在终端中使用以下行:

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

而且有效!


0

在Pycharm中,有时Matplotlib.plot不会显示。

因此,调用后plt.show(),在右侧工具栏中检查SciView。在SciView内部,将存储每个生成的图。


0

我在尝试绘制直方图时遇到上面的错误,而下面的点对我有用。

操作系统:Mac Catalina 10.15.5

Pycharm版本:社区版本2019.2.3

Python版本:3.7

  1. 我将导入语句更改如下(从-到)

来自:

import matplotlib.pylab as plt

至:

import matplotlib.pyplot as plt

  1. 和下面的绘图语句(将我的命令表pyplot更改为plt)

从:

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

至 :

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. 使用plt.show显示直方图

plt.show()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.