为什么像'rectangle'和'line'这样的绘图命令会忽略'hold off'?

ela*_*lad 4 matlab plot matlab-figure

我试图在循环中显示一个变化的矩形,有暂停,它忽略了hold off(实际上它假定为默认值).

这是一个简化版的代码:

clc; close all; clear all;

rect = [10 10 20 30];

figure
axis([0 200 0 50]);

for i = 1 : 15
    rect(1) = rect(1) + i;
    rectangle('Position', rect, 'edgeColor', [1 0 0]);
    hold off;
    pause(0.2);
end
Run Code Online (Sandbox Code Playgroud)

这是故意的吗?我错过了什么吗?除了在每次迭代后将其绘制为白色之外,我还能做些什么来使之前的矩形消失?

谢谢..

编辑:

非常简化的版本已经解决,但是如果我想在同一个图上绘制另一个东西,另一个图则忽略了延迟.在这种情况下我该怎么办?

再次感谢.

clc; close all; clear all;

rect = [10 10 20 30];

figure
axis([0 200 0 50]);

h1 = [];
for i = 1 : 15
    rect(1) = rect(1) + i;
    delete(h1);
    h1 = rectangle('Position', rect, 'edgeColor', [1 0 0]);
    hold on
    plot (5 + 5 * i, 5, '*g');
    hold off
    pause(0.2);
end
Run Code Online (Sandbox Code Playgroud)

the*_*alk 7

更新:Matlab R2014b及更高版本

随着Matlab R2014b中手柄图形引擎更新,文档中的符号发生了一些变化.核心图形对象绘图对象没有独特的站点 ,但是在这里您可以看到这两种对象现在称为绘图功能对象原始对象.


原因是,用于绘图的核心图形对象与其子组绘图对象之间存在差异,目的是显示数据,使用Core Graphics Objects执行此操作.

核心图形对象

核心图形对象包括基本绘图基元:

  • 线,文本和多边形外壳(修补程序对象)

  • 像曲面这样的专用对象,由矩形的顶点网格组成

  • 图片

  • 灯光对象,不可见但会影响某些对象的着色方式

绘图对象

许多高级绘图功能创建绘图对象.绘图对象的属性可以轻松访问绘图对象包含的核心图形对象的重要属性.

一个典型的例子是命令lineplot- 基本相同.但他们属于不同的群体.如果想要绘制数据,他会使用plot,完成任务.如果一个人想用线条 "画"某些东西,你就不会总是需要hold一切.

所以回答你的问题:是的,这是故意的.

为了解决你的问题,我会使用plot以下方法编写一个新的矩形函数:

function h = plotRectangle(posX, posY, width, height)

x = [posX posX+width posX+width  posX        posX];
y = [posY posY       posY+height posY+height posY];

h = plot(x,y);

end
Run Code Online (Sandbox Code Playgroud)

分别:

function h = plotRectangle(PosVector)

X = PosVector;

x = [X(1) X(1)+X(3) X(1)+X(3)  X(1)        X(1)];
y = [X(2) X(2)      X(2)+X(4)  X(2)+X(4)   X(2)];

h = plot(x,y);

end
Run Code Online (Sandbox Code Playgroud)

后者现在可以与您的代码一起使用:

rect = [10 10 20 30];

figure
axis([0 200 0 50]);

for i = 1 : 15
    rect(1) = rect(1) + i;
    plotRectangle(rect);
    hold off;
    pause(0.2);
end
Run Code Online (Sandbox Code Playgroud)