Ubuntu服务器上没有GUI的Matplotlib替代品?

2024-04-26 21:57:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个运行bitnamidjango ubuntu14.04lts的无图形用户界面云服务器,它的目的是为用户检索和绘制数据,但它不能生成图形。为了清楚起见,我只关心图形图像的生成和保存,而不是用户可以选择单击按钮来保存图像。这样的功能对于这样的服务器来说毫无意义。在

在我的普通ubuntulinux(Mate)14.04lts上,脚本运行得非常好,生成了一个matplotlib.pyplot从具有save、zoom、rotate和其他功能的GUI窗口中获取相关数据;但是在云服务器上,即使我不尝试调用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。在


Tags: inpyimport服务器modmatplotliblibpackages
1条回答
网友
1楼 · 发布于 2024-04-26 21:57:18

这可能不是一个实际的答案,因为我无法测试它,但错误似乎来自于这样一个事实:尝试加载tkinter失败。因此,自然的解决方案可能是避免使用Tk后端。在

matplotlib中有多个后端,有些不用于交互式打印。你会用的

import matplotlib 
print matplotlib.rcsetup.non_interactive_bk

(请确保在导入pyplot之前运行此程序)。列表包含

^{pr2}$

这些都有可能适合你的情况。要选择其中一个,请使用

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

(仍在导入pyplot之前)

最后导入pyplot并完成您的工作,避免plt.show()。也可能是某些后端的某些功能不存在—这些功能需要测试,例如从pdf后端保存svg将无法工作。在

相关问题 更多 >