Python 在matplotlib图形窗口(使用imshow)中,如何删除、隐藏或重新定义鼠标的显示位置?
我将ipython与matplotlib一起使用,并以以下方式显示图像: (由:ipython--pylab启动) 现在,当我在图像上移动光标时,我看到鼠标的位置显示在figure窗口的左下角。显示的数字是x=列编号,y=行编号。这是非常以情节为导向的,而不是以图像为导向的。我可以修改显示的数字吗Python 在matplotlib图形窗口(使用imshow)中,如何删除、隐藏或重新定义鼠标的显示位置?,python,matplotlib,ipython,Python,Matplotlib,Ipython,我将ipython与matplotlib一起使用,并以以下方式显示图像: (由:ipython--pylab启动) 现在,当我在图像上移动光标时,我看到鼠标的位置显示在figure窗口的左下角。显示的数字是x=列编号,y=行编号。这是非常以情节为导向的,而不是以图像为导向的。我可以修改显示的数字吗 我的第一个选择是显示x=行数*标量,y=列数*标量 我的第二个选择是显示x=行编号,y=列编号 我的第三个选择是根本不显示鼠标位置的数字 我能做这些事情吗?我甚至不知道该怎么称呼这个鼠标悬停测试显示小
我能做这些事情吗?我甚至不知道该怎么称呼这个鼠标悬停测试显示小部件。谢谢 是的,你可以。但这比你想象的要难 您看到的鼠标跟踪标签是通过调用matplotlib.axes.axes.format_coord来响应鼠标跟踪而生成的。您必须创建自己的Axis类(覆盖format_coord以执行您希望它执行的操作),然后指示matplotlib使用它来代替默认的Axis类 具体而言: 创建自己的Axes子类 注册Axes子类 创建一个图形,并使用自定义轴 像以前一样绘制数据
通过简单地重新分配
轴
对象的格式协调
,可以在每个轴的基础上非常简单地执行此操作,如中所示
format_-coord
是任何函数,它接受两个参数(x,y)并返回一个字符串(然后显示在图上)
如果不想显示,只需执行以下操作:
ax.format_coord = lambda x, y: ''
如果只需要行和列(不勾选)
如果您想在制作的每个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
这是可行的,但有更简单的方法。
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)
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))
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