使用matplotlib进行交互式图像绘制

5
我正在从Matlab转向NumPy/matplotlib。Matplotlib中似乎缺少的一个功能是交互式绘图。 缩放和平移 很有用,但对我来说,经常使用的情况是这样的:

我使用 imshow() 绘制灰度图像(Matlab和matplotlib都做得很好)。在出现的图中,我想要定位某个特定像素(其x和y坐标)并获得它的值。

在Matlab图中很容易做到,但在matplotlib中有没有办法做到这一点?

这个 看起来很接近,但似乎不适用于图像。

2个回答

2
我相信您已经成功地完成了这个任务。稍微(!)修改链接,我编写了以下代码,一旦在绘图区域内单击,即可为您提供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的基础知识。
附言:该程序将提供确切的像素位置。该位置处的值应给出相应像素的灰度值。
另外,以下链接可能会有所帮助:http://matplotlib.sourceforge.net/users/image_tutorial.html

2

对于这个问题,您需要使用自定义事件处理程序。虽然不难,但也不是“它只是工作”的问题。

这个问题似乎与您所需的非常接近。如果您需要任何澄清,我很乐意添加更多信息。


看起来很有前途。我会试一试并告诉你的。当我在搜索SO时,我没有找到那个问题。对于我的目的,我不需要插值值,因此从图像数组中检索值是最好的方法。我欣赏matplotlib的可扩展性,但内置这样的东西肯定会很好。 - Rich Li
抱歉耽搁了。是的,你对那个问题的回答有一个相当不错的事件处理程序。它对我的需求足够好用,尽管在鼠标悬停时将信息显示在图形的状态栏中会更酷。如果我以后有时间/兴趣,我会看看我能做些什么。 - Rich Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接