如何在Matplotlib中获取矩形缩放后线条数据的可见部分?
在Matplotlib矩形缩放后获取可见数据部分
你用get_xdata()和get_ydata()拿到的是完整原始数据,这很正常——Matplotlib的矩形缩放只是调整了坐标轴的显示范围,根本没碰原始数据集,所以这两个方法返回的始终是全部数据。
要拿到当前可见的数据,得先获取坐标轴的显示边界,再用边界去筛选原始数据,具体做法如下:
手动缩放后主动获取
缩放完成后,执行这段代码就能提取可见部分:
# 获取当前坐标轴的x、y显示范围 x_min, x_max = ax.get_xlim() y_min, y_max = ax.get_ylim() # 筛选落在范围内的数据(假设x、y是numpy数组) mask = (x >= x_min) & (x <= x_max) & (y >= y_min) & (y <= y_max) x_visible = x[mask] y_visible = y[mask]
如果x、y是普通列表,先转成numpy数组再筛选更方便:
import numpy as np x_arr = np.array(x) y_arr = np.array(y) mask = (x_arr >= x_min) & (x_arr <= x_max) & (y_arr >= y_min) & (y_arr <= y_max) x_visible = x_arr[mask] y_visible = y_arr[mask]
绑定事件自动获取
要是想每次缩放后自动拿到可见数据,可以给画布绑定坐标轴范围变化的事件:
def handle_zoom(event): # 获取最新的坐标轴范围 x_min, x_max = ax.get_xlim() y_min, y_max = ax.get_ylim() # 筛选可见数据 mask = (x >= x_min) & (x <= x_max) & (y >= y_min) & (y <= y_max) x_visible = x[mask] y_visible = y[mask] # 这里可以加自己的处理逻辑,比如打印长度或保存数据 print(f"当前可见数据点数量: {len(x_visible)}") # 绑定事件,坐标轴范围变化时触发函数 fig.canvas.mpl_connect('xlim_changed', handle_zoom) fig.canvas.mpl_connect('ylim_changed', handle_zoom)
内容的提问来源于stack exchange,提问作者drC1Ron
相关产品推荐
相关产品推荐

