在一个matplotlib图窗口(与imshow),我怎样才能除去,隐藏或重新定义鼠标的显示位置?

2019-07-18 06:29发布

这个问题已经在这里有一个答案:

  • 在Python图像的互动像素信息? 4个回答

我使用IPython的与matplotlib,我表现出这样的图片:

(开始了:IPython中--pylab)

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

现在,我将光标移动到图片,我看到图中的窗口的左下角显示鼠标的位置。 显示的数字是X =列编号,y =行数。 这是极积为导向,而不是面向图像。 我可以修改显示的数字?

  1. 我的第一选择将显示X =行数*标量,Y =列号*标量
  2. 我的第二个选择是显示X =行数,y =列数
  3. 我的第三个选择是不是鼠标位置的显示数字在所有

我可以做这些事情? 我甚至不知道什么叫那个小鼠标悬停测试显示部件。 谢谢!

Answer 1:

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

format_coord是取2个参数(X,Y),并返回一个字符串(其随后在该图中显示的任何功能。

如果你想有没有显示简单地做:

ax.format_coord = lambda x, y: ''

如果你只想要行和列(带出来检查)

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

如果你想这样做,你 IIMAGE,只需定义包装函数

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

与太大的测试中,我认为应该更多或更少的可插入式更换plt.imshow



Answer 2:

是的你可以。 但它比你想象的更难。

你看到的鼠标跟踪标签通过响应鼠标跟踪呼叫matplotlib.axes.Axes.format_coord产生。 你必须创建自己的轴类(覆盖format_coord做你想要它做什么),然后指示matplotlib取代默认的一个来使用它。

特别:

制作自己的轴子

from matplotlib.axes import Axes
class MyRectilinearAxes(Axes):
    name = 'MyRectilinearAxes'
    def format_coord(self, x, y):
        # Massage your data here -- good place for scalar multiplication
        if x is None:
            xs = '???'
        else:
            xs = self.format_xdata(x * .5)
        if y is None:
            ys = '???'
        else:
            ys = self.format_ydata(y * .5)
        # Format your label here -- I transposed x and y labels
        return 'x=%s y=%s' % (ys, xs)

注册您的轴子

from matplotlib.projections import projection_registry
projection_registry.register(MyRectilinearAxes)

创建一个人物,并与您的自定义坐标轴

figure()
subplot(111, projection="MyRectilinearAxes")

画出你的数据之前,

im = zeros([256,256]) #just a stand-in for my real images
imshow(im)


文章来源: In a matplotlib figure window (with imshow), how can I remove, hide, or redefine the displayed position of the mouse? [duplicate]