首页 > 解决方案 > Matplotlib 鼠标光标坐标未显示空刻度标签

问题描述

matplotlib中,交互式绘图窗口在左下角显示鼠标光标绘图坐标。

import matplotlib.pyplot as plt

plt.ion()
ax = plt.gca()

但是,假设我想隐藏(不一定删除)y 轴上的刻度标签,例如通过

ax.set_yticklabels([])

刻度标签已消失,但 y 轴不再显示鼠标光标绘图坐标。隐藏 y 轴的另一种方法是

ax.tick_params(labelleft=False)

这会保留鼠标光标坐标。空的刻度标签列表如何“破坏”坐标信息?我假设预期的行为是刻度标签不会改变底层绘图坐标,无论指定它们(imshow's extent、x 数组plt.plot等)。

标签: pythonmatplotlib

解决方案


工具栏上的坐标格式化程序由当前的 Axes 格式化程序确定。默认情况下,在设置之前yticklabels,这是一个ticker.ScalarFormatter实例。当您运行ax.set_yticklabels([])时,格式化程序被设置为一个ticker.FixedFormatter实例,在这种情况下,它显然被定制为为任何输入值返回一个空字符串(这样您就不会得到任何刻度标签)。

ax.format_coord您可以通过设置为您想要的坐标格式的函数来恢复工具栏的原始功能。例如:

ax.format_coord = lambda x, y: 'x={:g}, y={:g}'.format(x, y)

在一个最小的例子中:

import matplotlib.pyplot as plt
plt.ion()
fig, ax = plt.subplots()
ax.set_yticklabels([])
ax.format_coord = lambda x, y: 'x={:g}, y={:g}'.format(x, y)

在此处输入图像描述


推荐阅读