2016-11-13 53 views
1

我有一個運行Bitnami-Django Ubuntu 14.04 LTS的無GUI GUI雲服務器,用於爲用戶檢索和繪製數據,但無法生成圖形。要清楚,我只關心圖形圖像的生成和保存,而不是用戶可以選擇單擊按鈕來保存圖像。這樣的功能對於這樣的服務器來說是沒有意義的。與沒有GUI的Ubuntu服務器相當的matplotlib?

在我的普通Ubuntu Linux(Mate)14.04 LTS上,這些腳本完美地工作,在GUI窗口中通過保存,縮放,旋轉和其他功能從相關數據生成matplotlib.pyplot;然而,在雲服務器上我得到這個錯誤,即使我不嘗試調用Show()函數:

[email protected]:/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。

回答

0

這可能不是一個實際的答案,因爲我無法測試它,但似乎錯誤來自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是行不通的。