【问题标题】:matplotlib equivalent for Ubuntu servers with no GUI?matplotlib 等效于没有 GUI 的 Ubuntu 服务器?
【发布时间】:2017-03-26 23:39:36
【问题描述】:

我有一个运行 Bitnami-Django Ubuntu 14.04 LTS 的无 GUI 云服务器,旨在为用户检索和绘制数据,但它无法生成图表。需要明确的是,我只关心图形图像的生成和保存,而不是用户可以选择单击按钮来保存图像。这样的功能对于这样的服务器将毫无意义。

在我的普通 Ubuntu Linux (Mate) 14.04 LTS 上,脚本运行良好,从 GUI 窗口中的相关数据生成 matplotlib.pyplot,具有保存、缩放、旋转和其他功能;但是在云服务器上我得到了这个错误,即使我不尝试调用 show() 函数:

bitnami@StockPredix:/opt/bitnami/apps/django/django_projects/Project$ python api-test_volume.py 
Traceback (most recent call last):
  File "api-test_volume.py", line 8, in <module>
    import matplotlib.pyplot as plt
  File "/opt/bitnami/python/lib/python2.7/site-packages/matplotlib/pyplot.py", line 114, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/opt/bitnami/python/lib/python2.7/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "/opt/bitnami/python/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 6, in <module>
    from matplotlib.externals.six.moves import tkinter as Tk
  File "/opt/bitnami/python/lib/python2.7/site-packages/matplotlib/externals/six.py", line 199, in load_module
    mod = mod._resolve()
  File "/opt/bitnami/python/lib/python2.7/site-packages/matplotlib/externals/six.py", line 113, in _resolve
    return _import_module(self.mod)
  File "/opt/bitnami/python/lib/python2.7/site-packages/matplotlib/externals/six.py", line 80, in _import_module
    __import__(name)
  File "/opt/bitnami/python/lib/python2.7/lib-tk/Tkinter.py", line 39, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ImportError: No module named _tkinter

即使在我安装了其他依赖项并尝试安装 tk-dev、tcl-dev 等之后,这种情况仍在继续。我想我需要一个 matplotlib 的替代品来生成图表,除非你们中的某个人知道一个聪明的解决方法。提前感谢您的帮助。

(快速)编辑:我知道并尝试了Save plot to image file instead of displaying it using Matplotlib 中的修复,但在我的云服务器上,这首先是与 GUI 的依赖关系中断的问题,而不是仅仅抑制 GUI。

【问题讨论】:

    标签: python apache matplotlib server


    【解决方案1】:

    这可能不是一个实际的答案,因为我无法对其进行测试,但似乎错误来自 tkinter 尝试加载失败的事实。所以自然的解决方案可能是避免使用 Tk 后端。

    matplotlib 中有几个后端,有些不适合交互式绘图。你会得到那些

    import matplotlib 
    print matplotlib.rcsetup.non_interactive_bk
    

    (确保在导入 pyplot 之前运行它)。该列表包含

    [u'agg', u'cairo', u'emf', u'gdk', u'pdf', u'pgf', u'ps', u'svg', u'template']
    

    其中任何一个都可能适合您的情况。要选择其中之一,请使用

    matplotlib.use('<name of backend>')
    

    (还是在导入 pyplot 之前)

    最后导入 pyplot 并做你的事情,避免 plt.show()。也可能是某些后端不存在某些功能 - 需要测试,例如从 pdf 后端保存 svg 不起作用。

    【讨论】:

      猜你喜欢
      • 2017-10-28
      • 1970-01-01
      • 2011-08-07
      • 2017-01-13
      • 2018-01-14
      • 2015-01-28
      • 2012-01-19
      • 2023-01-08
      • 1970-01-01
      相关资源
      最近更新 更多