【问题标题】:How can I set the 'backend' in matplotlib in Python?如何在 Python 的 matplotlib 中设置“后端”?
【发布时间】:2011-06-23 06:21:20
【问题描述】:

我是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

【问题讨论】:

    标签: python linux graphics matplotlib


    【解决方案1】:

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

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

    ImportError: 没有名为 _backend_gdk 的模块

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

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

    尝试其他 GUI backends,按此顺序:

    • TkAgg
    • wxAgg
    • Qt5Agg
    • Qt4Agg

    【讨论】:

    • 非常感谢我做错的工作人员是在获取 PyGTK 之前设置 matplotlib
    • 作为旁注,我会最后尝试 QTAgg,因为它针对 QT3 并且可能会在中期被弃用。
    【解决方案2】:

    仅供参考,我发现我需要在 Python 导入顺序中将 matplotlib.use('Agg') 放在首位。对于我正在做的事情(单元测试需要无头),这意味着把

    import matplotlib
    matplotlib.use('Agg')
    

    在我的主测试脚本的顶部。我不必接触任何其他文件。

    【讨论】:

    • 我必须做同样让我很困扰的事情。你有没有找到另一个优雅的解决方案?
    • 我发现它位于最顶端很重要(而不是在某些其他导入之后)。 +1。
    • 是的,这绝对是您在导入任何其他 matplotlib 之前要做的第一件事。
    【解决方案3】:

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

    这样,如果代码与其他人共享,后端就不需要硬编码。 欲了解更多信息,请查看documentation

    【讨论】:

      【解决方案4】:

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

      如果您想要一个交互式实验室环境,如在 Matlab/Pylab 中,您显然需要导入支持 gui 使用的后端,例如 Qt4Agg(需要 Qt 和 AGG)、GTKAgg(GTK 和 AGG)或 WXAgg(wxWidgets 和聚合)。

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

      【讨论】:

        【解决方案5】:

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

        export MPLBACKEND=TkAgg
        

        【讨论】:

          【解决方案6】:

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

          使用以下内容:

          matplotlib.use('WebAgg')
          

          【讨论】:

            【解决方案7】:

            对于新人,

            matplotlib.pyplot.switch_backend(newbackend)
            

            【讨论】:

              【解决方案8】:

              我在自己的 VIRTUAL_ENV 中尝试编译 python、numpy、scipy、matplotlib 时遇到了这个问题

              在安装 matplotlib 之前,您必须构建并安装: pygobject 皮卡罗 pygtk

              然后用 matplotlib 来做: 在构建 matplotlib 之前,使用 'python ./setup.py build --help' 检查是否启用了 'gtkagg' 后端。然后构建并安装

              在导出 PKG_CONFIG_PATH=$VIRTUAL_ENV/lib/pkgconfig 之前

              【讨论】:

                猜你喜欢
                • 2020-05-31
                • 2011-03-18
                • 2017-03-11
                • 1970-01-01
                • 2018-08-09
                • 2016-12-23
                • 1970-01-01
                • 2017-08-02
                • 1970-01-01
                相关资源
                最近更新 更多