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

如何在for循环中用hold on实现MATLAB单图多数据点叠加绘图

解决Matlab中for循环绘图无法在同一图叠加的问题

你的问题根源很明确:把figure;放在了for循环内部,每次循环迭代都会创建一个全新的图形窗口,自然没法在同一个图里叠加多组标记。另外还有几个小细节可以优化,我给你整理好修正方案:

修正思路

  1. 把创建图形窗口、开启hold on和网格的操作移到循环外面,只执行一次
  2. 循环内只负责计算新的x1,y1,x2,y2并绘图,无需重复设置hold on
  3. 去掉手动的i=i+1,Matlab的for循环会自动帮你迭代索引

修正后的代码

% 先创建图形窗口并初始化绘图设置
figure; 
hold on; 
grid on;
xlim([-a a]); 
ylim([-a a]); % 如果a是固定值,这里只设一次就够了

for i=1:8
    % 这里写你计算x1,y1,x2,y2的代码,比如:
    % x1 = ...; y1 = ...;
    % x2 = ...; y2 = ...;
    
    % 绘制当前组的点和叉
    plot(x1,y1,'.','MarkerSize',20,'Color','r');
    plot(x2,y2,'x','MarkerSize',10,'Color','b');
    
    % 可选:如果需要实时看到绘图更新,加上这句
    % drawnow;
end

% 循环结束后可以关闭hold(可选)
hold off;

为什么原来的代码不行?

你原来的代码里,每次循环都调用figure;,这会强制Matlab创建新的图形对象。哪怕你在循环里加了hold on,也是针对那个新创建的窗口生效,所以每次都是新图,无法叠加。

另外,hold on只需要调用一次就会一直生效(直到你调用hold off或者关闭窗口),循环里重复调用虽然不会出错,但完全没必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:17:12