2011-09-30 159 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