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
相关产品推荐
相关产品推荐

