2015-10-13 44 views
3

我想在matplotlib中顯示圖像的x y座標。 the example code在全局python安裝中工作得非常好:當我移動光標時,x,y,z值立即得到更新。但是,當我在python虛擬環境中運行示例代碼時,我會多次點擊圖像以便首先顯示座標,然後當我點擊不同的位置時,它會更新一些。點擊幾下後,座標將不再更新。matplotlib示例代碼不能在python虛擬環境中工作

我不知道如何調試。

+4

如果代碼是相同的,那麼在任何包或python版本中應該有所不同。在全局和虛擬環境中使用'pip freeze'並進行比較。另請參閱python版本本身是否相同。也可能是matplotlib使用不同的後端,所以也請檢查'matplotlib.get_backend()'。 – swenzel

+0

的python版本是一樣的。 matplotlib是不同的。我從我的virtualenv中卸載它,並安裝了在我的全局python中找到的相同版本。但是,問題依然存在。 @swenzel – MAS

+1

後臺怎麼樣? – swenzel

回答

17

這可能是matplotlib的macosx後端的一個問題。切換到使用替代後端matplotlib(例如使用qt4而不是'macosx')。有關如何切換後端以及這意味着什麼的詳細信息,請參閱the docs here。請注意,您可能必須先安裝後端 - 例如pyqt使用qt4agg後端,因爲我在這裏暗示。

總結 - 後端處理來自matplotlib的輸出,而matplotlib可以針對不同的輸出格式。這些可以是GUI顯示輸出格式(例如wxqt4等)或文件輸出(例如pdf)。這些被分別稱爲交互式和非交互式後端。

要更改後臺無論是在代碼中完成

import matplotlib 
matplotlib.use('qt4agg') 

,或者 - 如果你想改變每次啓動matplotlib - edit your matplotlibrc file設置後端屬性如

backend: Qt4Agg 

注:我發佈了一條評論,自從發佈這個答案以來,matplotlib文檔現在引用了這個問題,並且suggest a workaround,儘管評論者注意到在這個答案中提供的解決方案(切換到Qt後端)適用於那些官方文檔無法實現的解決方法爲他們。

+0

爲我工作過(在使用brew安裝pyqt之後)! matplotlib文檔提出了更長的解決方法,我實際上無法做到這一點.. http://matplotlib.org/faq/virtualenv_faq.html – SeF

0

終於爲我工作的是使本地matplotlibrc文件包含指令:backend: TkAgg

# Within working directory where running python 
vim matplotlibrc 
# new file via vim, Nano, whatever 
backend: TkAgg 

This是有益的:

import matplotlib 
print matplotlib.rcParams['backend'] 

其他注意事項:

我一直在使用自制(brew install pyqt)也安裝PyQt的,並從/usr/local/lib/python2.7/site-packages/PyQt4

複製(可能只是移動)到 $MyVirtEnv/lib/python2.7/site-packages/

但是當我

import matplotlib 
matplotlib.use('qt4Agg') 
import librosa 
"Matplotlib qt-based backends require an external PyQt4, PyQt5,\n" 
ImportError: Matplotlib qt-based backends require an external PyQt4, PyQt5, 
or PySide package to be installed, but it was not found. 

還曾試圖

pip install pyside 
Successfully installed pyside-1.2.4 

同樣的錯誤

>>> import pyside 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named pyside 

而且在某些時候試圖重新導入matplotlib(我認爲),當有以下錯誤。

from . import cache 
ImportError: cannot import name cache