MATLAB迭代动态绘图时隐藏历史折线保留固定散点的修改方法
解决方法
核心思路
- 不能直接用
cla/clf清空整张画布,会把需要保留的蓝色散点一同删除 - 单独存储每次生成的黑色折线的图形句柄,每次迭代前仅删除上一轮的折线对象即可
修改后的完整代码
N = 50; L = 20; itr = 5; N_x = (rand(N,1)-0.5)*L; N_y = (rand(N,1)-0.5)*L; plot(N_x,N_y,'Ob','MarkerSize',10); grid on; hold on; axis([-0.5*L 0.5*L -0.5*L 0.5*L]); line_hdl = []; % 新增:存储黑色折线的图形句柄 for n = 1:itr if ~isempty(line_hdl) delete(line_hdl); % 新增:删除上一轮生成的黑色折线 end out = randperm(N,5); plot_x = N_x(out); plot_y = N_y(out); line_hdl = plot(plot_x,plot_y,'-k'); % 修改:保存当前折线的句柄 pause(1); end
关键改动说明
- 循环外新增空变量
line_hdl,专门用来存储上一轮黑色折线的图形句柄 - 每次进入循环先判断
line_hdl是否存在,存在则调用delete()仅删除上一轮的折线,不会影响蓝色散点 - 绘制当前轮次折线时,将返回的句柄赋值给
line_hdl,供下一轮迭代删除使用 - 移除了循环内冗余的
hold on语句,外层已经开启hold on无需重复执行
内容的提问来源于stack exchange,提问作者Frey
相关产品推荐
相关产品推荐

