簡體   English   中英

使用matplotlib繪制圖形,使用X11和OS X在ssh上繪制圖形

[英]Plotting figures using matplotlib, over ssh using X11 and OS X

摘要:當本地計算機運行OS X時,如何通過SSH將圖形繪制到遠程計算機?

我有計算機A,並且嘗試使用matplotlib在計算機B上進行繪圖。我遇到的問題是,當我使用matplotlib時,該圖僅顯示在計算機A上。我在VNC中查看並彈出它們。 我可以將-X / -Y SSH到計算機A並運行xcalc,它將顯示在計算機B上。我可以將計算機B連接到運行Red Hat的第三台計算機,並且繪圖將顯示在計算機B上。我確信它不是是計算機B的問題。 我相信我的問題與此問題相同:軟件包安裝程序都不支持matplotlib的X11后端。 我無法發表評論,所以我堅持將我嘗試過的內容放在一個新問題中。 這是對多次嘗試都不起作用的相同問題的另一種描述。

如前所述,我已經在計算機A上為matplotlib安裝后端方面嘗試了許多解決方案。 我已經嘗試了Macports的所有庄園以及自制和點子組合。 我敢肯定,混合這么多包處理程序是一個壞主意,但是這么多解決方案似乎都是“ sudo ***** install package-name”。

要測試matplotlib是否正在執行我想要的操作,我使用以下python代碼段:

import matplotlib
matplotlib.use('gtk') # gtk is an example, I change it
import matplotlib.pyplot as plt
plt.ion()
plt.figure(1)
plt.plot([1]*10)

我不記得我嘗試過的所有事情。 我嘗試過的一些方法:

我嘗試使用GTK和GTKCairo,但無法解決我的問題,因為我無法使GTK正常工作。 Homebrew GTK仍然不支持X11,因此即使它正確安裝,我也認為它不會解決我的問題。 我尚未嘗試以其他方式安裝GTK。 我需要從源代碼安裝它嗎? 有人有這個工作嗎?

GTK錯誤:

ImportError: No module named _backend_gdk

后端MacOS,TkAgg,qt5agg都可以工作,但是數字顯示在計算機A上。我必須安裝pyqt5。 如果我未通過VNC連接,則python會引發有關無顯示的錯誤。 這三個都給出相同的錯誤:

Feb 22 13:00:22  Python[57649] <Error>: Set a breakpoint at CGSLogError to catch errors as they are logged.
Feb 22 13:00:22  Python[57649] <Error>: This user is not allowed access to the window system right now.
_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.

這不能解決我的問題。 也不是。

細節:

計算機A運行OS X 10.11計算機B運行OS X 10.12

編輯:我從源(以及QT)安裝了PyQt4,它沒有幫助。 我明確下載並安裝了X11版本。 我設置了matplotlib.use('qt4agg'),並且數字仍然出現在計算機A上。也許這是我安裝的“ macosx” QT嗎? 我不知道

最終導致我找到正確的答案。 問題是我無法安裝使用X11的后端。 事實證明macports具有使用x11的tk版本。 我認為這實際上是使用macports安裝python時的默認設置。

我從OS X服務器(計算機A)通過ssh / X11獲取matplotlib繪圖的步驟是:

1)卸載先前安裝的matplotlib和tk的macports:

sudo port uninstall py27-matplotlib
sudo port uninstall py27-tkinter
sudo port uninstall tk

2)重新安裝matplotlib以使用X11

sudo port install tk
sudo port install py27-tkinter
sudo port install py27-matplotlib -cairo +tkinter

“ -cairo”可能不是必需的。 tk沒有標志,因為默認為x11。

3)測試python + matplotlib:

import matplotlib
matplotlib.use('tkagg') # set the backend to tk, using agg renderer
import matplotlib.pyplot as plt
plt.ion()
plt.figure(1)
plt.plot([1]*10)

這將在計算機B上打開一個圖。

一些注意事項:

1)確保$ PYTHONPATH環境變量中沒有任何指向其他安裝程序(例如自制軟件或系統python)執行的python安裝的內容。 這可能會導致加載錯誤的matplotlib安裝。

2) 您可以使用matplotlibrc配置文件來避免每次打開matplotlib時都必須重新指定后端。

3)如我的原始帖子所述, Homebrew不再為GTK支持X11。 顯然,有一種方法可以讓自制軟件在X11上使用tk ,但是我還沒有弄清楚如何使它工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM