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

Matlab子图关联不同数据源实现跨图选中高亮且保留原始绘图的方法

解决方案

核心思路

放弃使用兼容性较差的linkdata功能,改用Matlab内置的brush选点工具搭配自定义回调函数实现同步高亮,全程不会修改原有绘图样式,同时适配通用函数封装需求。

完整实现代码

function linkedPlot(lat, lon, x, y)
close all

% 若需测试可取消下方注释,调用时不用传参即可运行
% t = linspace(-2,2,100);
% lat = sin(t);
% lon = cos(t);
% x = t;
% y = exp(t);

figure()
% 绘制第一个子图并保留绘图句柄
subplot(1,2,1)
h1 = plot(lat, lon, '-x');
xlabel('纬度')
ylabel('经度')
title('经纬度轨迹')

% 绘制第二个子图并保留绘图句柄
subplot(1,2,2)
h2 = plot(x, y, '-x');
xlabel('时间戳')
ylabel('速度')
title('速度时序')

% 初始化brush工具
br = brush;
br.Enable = 'on';
% 设置选中高亮样式,可按需调整
br.Color = 'r';
br.Style = 'filled';

% 给两个子图绑定选点后触发的回调函数
set(h1, 'ButtonDownFcn', {@syncSelect, h1, h2});
set(h2, 'ButtonDownFcn', {@syncSelect, h2, h1});
% 全局绑定brush的选后回调,保证框选也能同步
set(br, 'PostSelectionCallback', {@syncBrushSelect, h1, h2});
end

% 点选同步回调
function syncSelect(~, ~, src_h, target_h)
br = brush(gcf);
% 获取当前选中的点索引
selected = logical(get(src_h, 'Selected'));
% 同步给目标绘图对象
set(target_h, 'Selected', selected);
end

% 框选同步回调
function syncBrushSelect(~, ~, h1, h2)
selected1 = logical(get(h1, 'Selected'));
selected2 = logical(get(h2, 'Selected'));
% 双向同步选中状态
if any(selected1)
    set(h2, 'Selected', selected1);
elseif any(selected2)
    set(h1, 'Selected', selected2);
end
end

代码说明

  • 原有绘图的线型、标记、颜色等样式完全保留,不会出现linkdata导致的样式异常问题
  • 同时支持单点点击选中、框选两种操作,选中一侧子图的任意点,另一侧子图相同索引的点会同步高亮
  • 函数已经预留了输入参数接口,直接传入你的lat、lon、x(即时间戳t)、y(即速度数据)即可使用,不需要修改内部逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:27:03