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

MATLAB循环迭代中散点图无法保留各次试验数据求助

MATLAB循环中散点图只显示最后一次试验数据的解决办法

问题原因

MATLAB默认每次调用scatter函数时,会清空当前坐标轴的所有内容,重新绘制新的散点。所以你在循环里每次画完当前试验的点,都会把之前的内容覆盖掉,最终只保留最后一次试验的数据。

解决方案1:开启绘图保持(最简单)

在循环开始前加上hold on,让坐标轴保留之前绘制的内容;循环结束后用hold off恢复默认设置,同时把轴标签、标题这类固定设置放到循环外面,避免重复执行:

% 先创建画布并开启绘图保持
figure;
hold on;
% 一次性设置轴范围和标签
xlim([-0.5, 1.5]);
ylim([0, 50]);
xlabel('Time (s)');
ylabel('Trial');
title(['Raster Plot for (' signal_title ')']);

for trial = 1:50
    trial_start = (trial-1) * trial_duration;
    window_start = trial_start - time_before_trial_start;
    window_end = trial_start + trial_duration + time_after_trial_end;

    % 筛选当前试验的事件时间
    trial_event_times = event_times(event_times >= window_start & event_times <= window_end);

    % 绘制当前试验的散点
    scatter(trial_event_times, trial);
end

% 恢复默认绘图行为
hold off;

解决方案2:先收集所有数据再一次性绘制(更高效)

如果试验次数较多,这种方法性能更优,避免多次重复的绘图操作:

% 初始化存储所有数据的变量
all_event_times = [];
all_trials = [];

for trial = 1:50
    trial_start = (trial-1) * trial_duration;
    window_start = trial_start - time_before_trial_start;
    window_end = trial_start + trial_duration + time_after_trial_end;

    % 筛选当前试验的事件时间
    trial_event_times = event_times(event_times >= window_start & event_times <= window_end);
    
    % 将当前试验的数据追加到总变量中
    all_event_times = [all_event_times, trial_event_times];
    all_trials = [all_trials, trial * ones(size(trial_event_times))];
end

% 一次性绘制所有试验的散点
scatter(all_event_times, all_trials);
xlim([-0.5, 1.5]);
ylim([0, 50]);
xlabel('Time (s)');
ylabel('Trial');
title(['Raster Plot for (' signal_title ')']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:23:23