You need to enable JavaScript to run this app. MATLAB绘图中如何裁剪部分数据 实现点击坐标点按x轴截断
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB绘图中如何裁剪部分数据 实现点击坐标点按x轴截断

双点交互按X轴裁剪MATLAB绘图数据的实现

原代码存在的可优化问题

  • 语句 x = output, output1; 存在语法歧义,MATLAB会将逗号后的内容作为独立语句解析,实际赋值结果仅为output,后续y轴变量与x轴未建立一一对应的索引关联
  • 原逻辑仅支持单点位裁剪,未实现双点选择区间裁剪的交互能力
  • 原代码仅对x数组做元素删除,未同步匹配删除同索引下的y值,容易触发x/y维度不匹配的绘图报错

适配双点裁剪需求的修正代码

load sample.mat
X = sample.current;
X1 = sample.voltage;
Ts = 0.01;
Fs = 1/Ts;
Fc = 2;
N = 10;
d = fdesign.lowpass('N,Fc', N, Fc, Fs);
Hd = design(d);
output = filter(Hd, X);
output1 = filter(Hd, X1);

figure;
plot(X, X1, '-g');
hold on
plot(output, output1, 'r');
hold off
legend('raw signal','filtered signal')
grid on

% 修正x/y变量的绑定关系
x_data = output;
y_data = output1;

figure
subplot(2,1,1)
plot(x_data, y_data, 'r');
title('Original plot');
uiwait(msgbox('请依次点击两个X轴位置,将保留两点之间的数据段','modal'));

% 捕获两个点击点的坐标
[click_x, ~] = ginput(2);
% 自动排序两个点击位置,适配用户点击顺序不固定的场景
x_crop_min = min(click_x);
x_crop_max = max(click_x);

% 通过索引掩码同步筛选x/y数组的对应元素
keep_idx = x_data >= x_crop_min & x_data <= x_crop_max;
x_cropped = x_data(keep_idx);
y_cropped = y_data(keep_idx);

subplot(2,1,2);
plot(x_cropped, y_cropped, 'r');
title('New plot with cropped values');
xlim([min(x_cropped(:)) max(x_cropped(:))]);

逻辑调整说明

  • 交互流程运行时会弹出模态提示框,用户依次点击两个坐标轴位置即可完成选择,程序不要求用户必须先点左侧再点右侧,会自动识别两个点构成的X轴范围
  • 裁剪操作通过索引映射同步作用于x、y两个数组,从根源避免维度不匹配的绘图报错
  • 如果需要实现裁掉两个点外侧所有数据的效果,只需将筛选条件替换为keep_idx = x_data < x_crop_min | x_data > x_crop_max即可保留区间外的全部数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 09:36:03