如何设置matplotlib的'backend'?

122 投票
8 回答
264897 浏览
提问于 2025-04-16 11:26

我刚开始使用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 个回答

21

这个设置也可以在配置文件 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

这样的话,如果代码要分享给其他人,就不需要把后端写死在代码里了。想了解更多信息,可以查看 文档

42

顺便说一下,我发现我需要在Python的导入顺序中先写上 matplotlib.use('Agg')。因为我在做的事情(单元测试需要在没有界面的情况下进行),所以我需要把

import matplotlib
matplotlib.use('Agg')

放在我的主测试脚本的最上面。我不需要修改其他任何文件。

120

你当前选择的后端 'agg' 不支持 show() 方法。

AGG 后端是用来写文件的,不是用来在窗口中显示的。想了解更多,可以查看 matplotlib 网站上的后端常见问题

导入错误:没有名为 _backend_gdk 的模块

对于第二个错误,可能是你的 matplotlib 版本没有编译支持 GTK,或者你缺少 PyGTK 包。试着安装一下。

你是在一个可以访问图形界面的终端或应用程序中调用 show() 方法吗?

可以尝试其他图形用户界面的 后端,建议按以下顺序尝试:

  • TkAgg
  • wxAgg
  • Qt5Agg
  • Qt4Agg

撰写回答