2011-09-30 115 views
2

我正在從Matlab轉換到NumPy/matplotlib。 matplotlib中似乎缺乏的一個功能是交互式繪圖。 Zooming and panning是有用的,但對我來說經常使用的情況是這樣的:用matplotlib繪製交互式圖像

我使用imshow()(Matlab和matplotlib都做得很好)繪製灰度圖像。在出現的圖中,我想精確定位某個像素(它的x和y座標)並獲得它的值。

這很容易在Matlab圖中做,但有沒有辦法在matplotlib中做到這一點?

This看起來很接近,但似乎並不意味着圖像。

回答

2

自定義事件處理程序是你將需要這個。這並不難,但也不是「它也適用」。

This question看起來很接近你以後。如果您需要澄清,我很樂意添加更多信息。

+0

這看起來很有希望。我會試一試,讓你知道。我在搜索SO時沒有發現這個問題。 出於我的目的,我不需要插值,所以從圖像數組中檢索值是最適合我的方法。我很欣賞matplotlib的可擴展性,但它肯定會很高興擁有這樣的內置內容。 –

+0

對不起。是的,你對這個問題的回答有一個非常漂亮的事件處理程序。它可以滿足我的需求,但在鼠標懸停而不是點擊過程中顯示圖形狀態欄中的信息會更酷。如果我以後有時間/興趣,我會看看我能做些什麼。 –

1

我相信你已經設法做到了這一點。稍微(!)修改link,我已經寫了下面的代碼,給你在繪圖區域內單擊的x和y座標。

from pylab import * 
import sys 
from numpy import * 
from matplotlib import pyplot 

class Test: 

    def __init__(self, x, y): 
    self.x = x 
    self.y = y 

    def __call__(self,event): 
    if event.inaxes: 
     print("Inside drawing area!") 
     print("x: ", event.x) 
     print("y: ", event.y) 
    else: 
     print("Outside drawing area!") 

if __name__ == '__main__':  
    x = range(10) 
    y = range(10)  
    fig = pyplot.figure("Test Interactive") 
    pyplot.scatter(x,y) 
    test = Test(x,y) 
    connect('button_press_event',test)  
    pyplot.show() 

此外,這應該更容易理解交互式繪圖比菜譜link提供了一個基礎。

P.S .:這個程序將提供確切的像素位置。在該位置的值應該給我們各個像素的灰度值。

還有以下可以幫助: http://matplotlib.sourceforge.net/users/image_tutorial.html