Matplotlib升级后如何恢复多y轴绘图的状态栏全鼠标坐标显示?
恢复Matplotlib多轴绘图的状态栏多坐标显示
Matplotlib升级后,状态栏默认仅展示当前激活轴的坐标。要恢复旧版本显示所有twin轴坐标的效果,可通过自定义Figure的坐标格式化函数实现:
- 基础实现:显示鼠标位置在所有轴上的数据坐标
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()
- 精准匹配数据点:显示对应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
相关产品推荐
相关产品推荐

