You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib升级后如何恢复多y轴绘图的状态栏全鼠标坐标显示?

恢复Matplotlib多轴绘图的状态栏多坐标显示

Matplotlib升级后,状态栏默认仅展示当前激活轴的坐标。要恢复旧版本显示所有twin轴坐标的效果,可通过自定义Figure的坐标格式化函数实现:

  1. 基础实现:显示鼠标位置在所有轴上的数据坐标
import matplotlib.pyplot as plt

# 创建双轴绘图
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

# 示例绘图数据
x = [1, 2, 3, 4]
y1 = [10, 20, 12, 18]
y2 = [400, 450, 442, 420]
ax1.plot(x, y1, 'b-')
ax2.plot(x, y2, 'r-')

def format_all_coords(x, y):
    coord_strs = []
    for ax in fig.axes:
        try:
            # 将屏幕坐标转为当前轴的数据坐标
            x_data, y_data = ax.transData.inverted().transform((x, y))
            coord_strs.append(f"({x_data:.1f}, {y_data:.1f})")
        except:
            continue
    return ' '.join(coord_strs)

# 绑定自定义函数到Figure的坐标格式化属性
fig.format_coord = format_all_coords

plt.show()
  1. 精准匹配数据点:显示对应x值在各轴曲线上的实际数据坐标
def format_data_point_coords(x, y):
    coord_strs = []
    for ax in fig.axes:
        for line in ax.get_lines():
            x_data = line.get_xdata()
            y_data = line.get_ydata()
            # 找到最接近鼠标x值的数据点索引
            idx = (abs(x_data - x)).argmin()
            coord_strs.append(f"({x_data[idx]:.1f}, {y_data[idx]:.1f})")
            # 每个轴只取一条曲线的点,可根据需求调整
            break
    return ' '.join(coord_strs)

fig.format_coord = format_data_point_coords

执行后状态栏会恢复类似旧版本的多坐标显示格式,比如(3.0, 12.0) (3.0, 442.0)。

内容的提问来源于stack exchange,提问作者Julien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 04:02:38