怎样设置matplotlib的'backend'?

120

我是Matplotlib的新用户,我的平台是Ubuntu 10.04 Python 2.6.5

这是我的代码

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt 
plt.plot([1,2,3])

错误是:
/usr/local/lib/python2.6/dist-packages/matplotlib/backends/__init__.py:41: UserWarning: 
Your currently selected backend, 'agg' does not support show().
Please select a GUI backend in your matplotlibrc file ('/usr/local/lib/python2.6/dist-packages/matplotlib/mpl-data/matplotlibrc')
or with matplotlib.use()
  (backend, matplotlib.matplotlib_fname()))
  • 我安装了Anti-Grain Geometry库apt-get install libagg,但它不起作用。
  • 我尝试使用其他后端参数,如'GTK'和'TkAgg'。
  • 我安装了python-gtk2-dev包,但仍然出现以下错误。
  • 有人可以告诉我一个可执行的后端参数及其依赖库吗?

以下是错误信息:

>>> matplotlib.use('GTK')
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/pyplot.py", line 95, in <module>
    new_figure_manager, draw_if_interactive, show = pylab_setup()
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/__init__.py", line 25, in pylab_setup
    globals(),locals(),[backend_name])
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/backend_gtk.py", line 28, in <module>
    from matplotlib.backends.backend_gdk import RendererGDK, FigureCanvasGDK 
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/backend_gdk.py", line 29, in <module>
    from matplotlib.backends._backend_gdk import pixbuf_get_pixels_array
ImportError: No module named _backend_gdk
8个回答

117

您当前选择的后端“agg”不支持show()方法。

AGG后端用于写入文件,而非在窗口中呈现。请参考matplotlib网站上的后端 FAQ

导入错误:找不到名称为_backend_gdk的模块

对于第二个错误,可能是由于您的matplotlib发行版没有编译GTK支持,或者缺少PyGTK包。尝试安装它。

您是否在具有图形界面的终端或应用程序中调用了 show() 方法?

按照以下顺序尝试其他GUI后端

  • TkAgg
  • wxAgg
  • Qt5Agg
  • Qt4Agg

非常感谢您。我之前的错误是在获取PyGTK之前设置了matplotlib。 - user504909
1
作为旁注,我建议最后尝试QTAgg,因为它针对的是QT3,很可能会在中期被弃用。 - tacaswell
当你指示使用其他GUI后端时,为什么要特别说“按照这个顺序”?不同的后端选项有什么区别? - SamC
"Qt5Agg" 对我有效(Python 3.8)。 - YosefBro
根据您的操作系统,您可能需要先安装相应的后端库(例如,在Arch Linux上为TkAgg安装tk)。 - Scriddie

41

提醒一下,我发现在Python的引入顺序中,我需要首先使用matplotlib.use('Agg')。 对于我的需求(需要无头运行单元测试),这意味着要放置:

import matplotlib
matplotlib.use('Agg')

在我的主测试脚本顶部。我不需要去碰其他任何文件。


我必须做同样的事情,这让我很困扰。你有没有找到另一个优雅的解决方案? - QM.py
我发现将其放在最顶部很重要(而不是在某些其他导入之后)。+1。 - Ryan
是的,在导入任何其他matplotlib之前,这必须是您要做的绝对第一件事情。 - JakeCowton

20

这也可以在配置文件matplotlibrc中设置(如错误信息中所解释的),例如:

# The default backend; one of GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo
# CocoaAgg MacOSX Qt4Agg Qt5Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG
backend : Agg

这样,如果代码与他人共享,后端就不需要硬编码。

欲了解更多信息,请查看文档


7
您发布的错误信息不相关。第一个错误是由于您选择了不适用于交互使用的后端(即agg)导致的。您仍然可以在不需要用户交互的脚本中生成图形,因此应该使用它们。
如果您想要一个交互式的实验室环境,就像Matlab/Pylab一样,您显然会导入支持GUI使用的后端,例如Qt4Agg(需要Qt和AGG)、GTKAgg(GTK和AGG)或WXAgg(wxWidgets和Agg)。
我建议首先尝试使用WXAgg,除此之外,这真的取决于您如何安装Python和matplotlib(源代码、软件包等)。

6

开始学习Python之前,你可以在Bash中执行以下操作:

export MPLBACKEND=TkAgg

6

您也可以尝试在浏览器中查看图表。

请使用以下方法:

matplotlib.use('WebAgg')

之前的解决方案对我没有起作用,但这个一次就解决了,谢谢! - undefined

3

对于新手来说,

matplotlib.pyplot.switch_backend(newbackend)

1

当我尝试在自己的虚拟环境中编译Python、Numpy、Scipy和Matplotlib时,遇到了这个问题。

在安装Matplotlib之前,您需要构建并安装以下内容:

  • pygobject
  • pycairo
  • pygtk

然后对Matplotlib进行以下操作:

  1. 在构建Matplotlib之前,请使用“python ./setup.py build --help”检查是否启用了“gtkagg”后端。
  2. 然后进行构建和安装。

在导出PKG_CONFIG_PATH=$VIRTUAL_ENV/lib/pkgconfig之前,请注意上述步骤。


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