Matplotlib图形在Sublime Text中无法显示

19

最近我开始使用Sublime Text 2,但是今天我注意到当在Sublime Text中运行时,plt.show()函数似乎无法正常工作。

比如说,如果我创建以下脚本:

import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.show() 

在IDLE中运行这个程序可以生成一个图表,但是在sublimetext中没有输出。它只是保持“思考”状态,直到我结束python.exe进程之后才会输出[Finished]。

我是否误解了sublimetext的使用方式?

谢谢。


你是如何在Sublime Text中执行脚本的?你使用的是哪个平台? - noio
我不确定你的意思,我只是按了F5键。 - iRoygbiv
我在Windows上使用Sublime Text 3版本3156(在CentOS上使用版本3143)。代码在两个系统上都可以正常工作。当我们按下“Ctrl+B”执行脚本后,图像窗口会显示出来。 - jdhao
5个回答

16

更合适的方法是只需在默认的Python构建系统文件中添加一行:

"shell": true

或者使用以下方式创建附加的Python构建系统:

{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "shell": true
}

它在我的电脑上可以运行,但在Windows系统中会出现以下信息: CMD.EXE是以以上路径作为当前目录启动的。 不支持UNC路径。默认为Windows目录。问题是现在构建有时会导致编辑器崩溃。 - Juan Osorio
对于Windows系统,文件变量必须放在方括号内,如下所示:"cmd": ["python", "-u", "${file}"],这样可以避免出现UNC路径警告。 - Juan Osorio

15

我猜想Sublime Text 2会在其自己的环境中启动你的代码,并且只会捕获和展示控制台输出。当使用GUI,如wxPython时,同样存在这个问题。

另一个解决方法是打开命令提示符并手动启动它(python file.py)。

编辑: 这里指出,“在Windows下,GUI被压制”。

编辑2: 这里列出了一个解决方法,在页面底部。


非常感谢!在经过数小时的谷歌搜索后,这对我很有用! - Fractaly

11

我按照上面建议尝试了Theta的回答,它可以正常工作。假如控制台像从文件资源管理器直接运行Python文件一样立即打开并关闭,只需在结尾添加以下代码:

matplotlib.pyplot.show('hold')

这是我第一次在这里回答问题。如果我没有遵循回答格式,请见谅。


4
这应该是正确的答案。它可以保持绘图窗口打开,而不修改开发环境。 - nazikus
MatplotlibDeprecationWarning: 自 Matplotlib 3.1 起,传递 show() 的 block 参数位置已被弃用;该参数将在 3.3 中变为关键字参数。 - Amir Samakar

10

在Sublime Text 3中(已安装Anaconda包),您需要像Theta所说的那样添加一个自定义构建系统,方法如下:

首先,在\path\to\Sublime Text Build XXXX\Data\Packages中添加一个名为python的文件夹。

然后将一个名为python.sublime-build的文件放入该文件夹中。

{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "shell": true
}

记住要像 Roald 说的那样添加 plt.show()

plt.imshow(image)
plt.show()

演示:

在此输入图片描述


3

我在Ubuntu上遇到了类似的问题。我想要像这样绘制一个pandas DataFrame

df = pandas.DataFrame([*range(5)])
df.plot()

但是图表没有显示。事实证明,您需要执行plt.show(),如此处所讨论的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接