如何在for循环中用hold on实现MATLAB单图多数据点叠加绘图
解决Matlab中for循环绘图无法在同一图叠加的问题
你的问题根源很明确:把figure;放在了for循环内部,每次循环迭代都会创建一个全新的图形窗口,自然没法在同一个图里叠加多组标记。另外还有几个小细节可以优化,我给你整理好修正方案:
修正思路
- 把创建图形窗口、开启
hold on和网格的操作移到循环外面,只执行一次 - 循环内只负责计算新的
x1,y1,x2,y2并绘图,无需重复设置hold on - 去掉手动的
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
相关产品推荐
相关产品推荐

