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

如何基于逻辑数组分割并绘制数组数据?

高效提取并绘制Matlab中的分段数据

针对你的需求,这里提供两种无需(或仅少量)循环的高效实现方案:

方法一:利用NaN自动断开线条(最简方案)

Matlab的plot函数遇到NaN值会自动断开线条,只需将不需要绘制的位置替换为NaN,直接绘图就能完成分段效果,全程无需循环:

x = 1:1:10;
y = ones(size(x));
segmentation = logical([1 1 1 1 0 0 0 0 1 1]);

% 将不需要绘制的位置设为NaN
x_plot = x;
y_plot = y;
x_plot(~segmentation) = NaN;
y_plot(~segmentation) = NaN;

figure;
hold on;
plot(x, y, 'b-o', 'DisplayName', '原始数据');
plot(x_plot, y_plot, 'r--x', 'DisplayName', '分段绘制结果');
legend;

此方法代码极简,执行效率最高,适合所有分段使用统一样式的场景。

方法二:提取分段起止索引,批量生成绘图参数

如果需要对不同分段设置个性化样式(比如不同颜色、标记),可以先通过diff定位所有分段的起始和结束索引,再批量构建绘图参数:

x = 1:1:10;
y = ones(size(x));
segmentation = logical([1 1 1 1 0 0 0 0 1 1]);

% 计算分段的边界位置
seg_diff = diff([0; segmentation(:); 0]);
starts = find(seg_diff == 1);
ends = find(seg_diff == -1) - 1;

% 构建绘图参数列表
plot_args = {};
for i = 1:length(starts)
    % 可在此处为每个分段单独设置样式
    plot_args = [plot_args, x(starts(i):ends(i)), y(starts(i):ends(i)), 'r--x'];
end

figure;
hold on;
plot(x, y, 'b-o', 'DisplayName', '原始数据');
plot(plot_args{:}, 'DisplayName', '分段绘制结果');
legend;

这里的循环仅针对分段数量(而非原始数据长度),效率依然很高,且支持灵活调整每个分段的绘图样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:05:58