在matplotlib图窗口(使用imshow)中,如何删除,隐藏或重新定义鼠标的显示位置?

Bec*_*cca 12 python matplotlib ipython

我正在使用带有matplotlib的ipython,我以这种方式显示图像:

(启动时间:ipython --pylab)

figure()  
im = zeros([256,256]) #just a stand-in for my real images   
imshow(im)
Run Code Online (Sandbox Code Playgroud)

现在,当我将光标移动到图像上时,我看到鼠标的位置显示在图形窗口的左下角.显示的数字是x =列号,y =行号.这是非常以情节为导向而不是以图像为导向.我可以修改显示的数字吗?

  1. 我的第一选择是显示x =行号*标量,y =列号*标量
  2. 我的第二选择是显示x =行号,y =列号
  3. 我的第三个选择是根本不显示鼠标位置的数字

我可以做这些事吗?我甚至不确定将鼠标悬停测试显示小部件称为什么.谢谢!

tac*_*ell 8

你可以通过简单地重新分配上做到这一点很简单,每轴基础format_coord的的Axes对象,如图所示的例子.

format_coord 是任何带有2个参数(x,y)的函数,并返回一个字符串(然后显示在图中.

如果你想没有显示,只需:

ax.format_coord = lambda x, y: ''
Run Code Online (Sandbox Code Playgroud)

如果你只想要行和列(没有检查)

scale_val = 1
ax.format_coord = lambda x, y: 'r=%d,c=%d' % (scale_val * int(x + .5), 
                                             scale_val * int(y + .5))
Run Code Online (Sandbox Code Playgroud)

如果你想在你制作的每个图像这样做,只需定义包装函数即可

def imshow(img, scale_val=1, ax=None, *args, **kwargs):
    if ax is None:
         ax = plt.gca()
    im = ax.imshow(img, *args, **kwargs)
    ax.format_coord = lambda x, y: 'r=%d,c=%d' % (scale_val * int(x + .5), 
                                             scale_val * int(y + .5))
    ax.figure.canvas.draw()
    return im
Run Code Online (Sandbox Code Playgroud)

经过多次测试我认为应该或多或少地替代 plt.imshow