Matplotlib: WebAgg 后端不显示任何图形

7
我正在使用Python 2.7.6 32位和Matplotlib 1.3.1进行开发。默认情况下,如此示例中所示,图形将被显示出来:
import matplotlib.pyplot as plt
plt.plot(range(10))
plt.show()

当我尝试使用WebAgg时,MPL页面会自动加载,但没有任何图像:
import matplotlib
matplotlib.use('webagg')
import matplotlib.pyplot as plt
plt.plot(range(10))
plt.show()


我在Windows和Ubuntu上使用Firefox、Chrome和IE测试了这段代码,但都没有成功……
有人可以帮忙吗?先谢谢了!


1
你的代码在我这里运行良好。图表会在浏览器窗口中弹出。你还有其他错误吗? - William Denman
1
我的建议是尝试重新安装Python和matplotlib。通常这样做可以解决像你遇到的难以确定的问题。 - William Denman
使用VirtualBox,我尝试了一次Ubuntu 12.10的干净安装(其中包括了Python 2.7.3),然后安装了NumPy、Matplotlib及其依赖项。但是,WebAgg浏览器窗口仍然只显示"Figure 1"链接,没有任何图像。点击链接也没有结果。 - alissonmuller
1
你是否可能有防火墙阻止了8888端口的访问?(这是webagg的默认端口。) - Joe Kington
我只在工作中测试过这个,所以可能有防火墙阻止了端口。等我回家后,我会再次测试代码。 - alissonmuller
显示剩余3条评论
3个回答

1

经过大量的搜索和测试,我最终使用pip卸载了Matplotlib,然后重新安装它(使用--upgrade命令,以确保更新):

pip uninstall matplotlib
pip install matplotlib --upgrade

它起作用了!现在我可以在浏览器窗口中看到WebAgg图表! 也许我之前没有正确安装Matplotlib...

感谢您的建议!


0

注意:截至2022年6月,Matplotlib(MPL)已更新至版本3.5.2。本文发布于2014年,涉及的是Ubuntu软件中心中Python-2.7的MPL 1.3版本,因此安装在/usr/目录下,属于root环境。因此,本文已过时且已经过时,我可能会将其删除。

升级到最新的开发版本Matplotlib-1.4.x。使用virtualenv进行安装。

$ pip install -e git@github.com:matplotlib/matplotlib.git

然后,OP的命令可以在所有平台上运行。在GitHub的matplotlib主分支上还有一个新的嵌入式webagg示例,它可以在我所有的系统(Windows-7x64、Ubuntu-14.14和Xubuntu-14.14)上运行。

使用OP的命令与Matplotlib-1.3.1一起使用时,结果因所使用的平台而异。在一台机器上(Ubuntu-14.14),如果我使用sudo来执行OP的命令,则可以显示图形:

$ sudo python  # XXX: not normally recommended!!!
>>> import matplotlib
>>> matplotlib.use('webagg')
>>> import matplotlib.pyplot as plt
>>> plt.plot(range(10))
>>> plt.show()

这在虚拟环境和Ubuntu发行版的matplotlib版本中都可以工作。

在VMWare Player虚拟机(Xubuntu-14.14托管在Windows-7x64上)上,我能够使用OP的命令显示图形而不需要sudo。在第三台(Windows-7x64)机器上,我仍然无法使用OP的命令获取图形,无论是否具有管理员权限。我还将matplotlib.rcParams['webagg.port']更改为8080和8000,但也没有起作用。

在从发行版存储库安装的matplotlib上使用Ubuntu-14.14,您将看到以下回溯:

File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_webagg.py", line 381, in get
'matplotlib.png'), 'rb') as fd:
IOError: [Errno 2] No such file or directory: '/usr/lib/pymodules/python2.7/matplotlib/mpl-data/images/matplotlib.png'

这与图像为何不显示无关;此错误仅在Linux机器上出现,其中mpl-data文件夹不在matplotlib.backends.backend_webagg期望的位置,而实际位于/usr/share/matplotlib/。具体来说,backend_webagg正在寻找文件matplotlib.png,它用作Web浏览器标签的图标,即使Tornado无法找到此文件,它仍会提供页面,但是不幸的是它仍然发出此错误。

如果您使用virtualenv,则不会看到favicon错误。

在Ubuntu-14.14上未使用sudo以及Windows-7x64机器上使用Matplotlib-1.3.1时,我遇到了与@allisonmuller在上面评论中遇到的相同的“figure 1”链接问题。


1
拜托,如果不必要,请不要使用 sudo - RedEyed
1
@RedEyed 我完全同意。这个答案是在2014年之前的,conda之前,venv还没有成为标准分发的一部分,人们还没有习惯于将virtualenv用于所有事情,所以我认为(很难记得)我当时是在谈论在Ubuntu软件中心使用MPL版本的问题。也许我应该回去更新一下这篇文章。我的意思是它太过时了。Python-2.7???哈! - Mark Mikofski

0
仅供参考,补充Mark Mikovski的回答,我发现如果按照以下方式添加符号链接:
cd /usr/lib/pymodules/python2.7/matplotlib/ ln -s /usr/share/matplotlib/mpl-data mpl-data
这似乎可以解决问题。

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