如何在Python中设置matplotlib中的"后端"?

use*_*909 74 python linux graphics matplotlib

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

这是我的代码

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt 
plt.plot([1,2,3])
Run Code Online (Sandbox Code Playgroud)

错误是:

/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()))
Run Code Online (Sandbox Code Playgroud)
  • 我安装了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
Run Code Online (Sandbox Code Playgroud)

And*_*ini 75

您当前选择的后端'agg'不支持show().

AGG后端用于写入文件,而不是用于在窗口中呈现.请参阅matplotlib网站上的后端常见问题解答.

ImportError:没有名为_backend_gdk的模块

对于第二个错误,可能您的matplotlib发行版没有使用GTK支持进行编译,或者您错过了PyGTK包.尝试安装它.

您是否在show()可以访问图形环境的终端或应用程序中调用该方法?

按此顺序尝试其他GUI后端:

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg


Ben*_*Ben 24

仅供参考,我发现我需要先放入matplotlib.use('Agg')Python导入订单.对于我正在做的事情(单元测试需要无头)意味着推杆

import matplotlib
matplotlib.use('Agg')
Run Code Online (Sandbox Code Playgroud)

在我的主测试脚本的顶部.我没有必要触摸任何其他文件.


Ben*_*enC 19

这也可以在配置文件中设置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
Run Code Online (Sandbox Code Playgroud)

这样,如果代码与其他人共享,则后端不需要硬编码.有关更多信息,请查看文档.


Jim*_*som 7

您发布的错误无关.第一个是由于您选择了不适合交互使用的后端,即agg.您仍然可以使用(并且应该使用)那些用于在不需要用户交互的脚本中生成绘图.

如果你想要一个交互式实验室环境,就像在Matlab/Pylab中一样,你显然会导入支持gui用法的后端,例如Qt4Agg(需要Qt和AGG),GTKAgg(GTK和AGG)或WXAgg(wxWidgets和Agg).

我首先尝试使用WXAgg,除此之外,它实际上取决于你如何安装Python和matplotlib(源代码,包等)


Fri*_*ich 6

在启动python之前,你可以在bash中做

export MPLBACKEND=TkAgg
Run Code Online (Sandbox Code Playgroud)


小智 6

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

使用以下内容:

matplotlib.use('WebAgg')
Run Code Online (Sandbox Code Playgroud)