试图让 MATLAB 的身影停止'blinking'



所以我在MATLAB中有一个简单的循环,它执行以下操作:

for p = 1:100
x = 4.*randn(1,100);
y = 7.*randn(1,100);
figure(1) 
plot(randn(1,100));
figure(2);
plot(randn(1,100));
end

x和y是合成的,但这是它的最后一个。无论如何,当我运行这段代码时,毫不奇怪,MATLAB会生成两个数字并相应地绘制。问题是,当我这样做的时候,我会在数字之间"眨眼",这会使看到x和y随时间演变的质量变差。

我发现了一种让其中一个情节更流畅的方法:

figure(1);
for p = 1:100
x = 4.*randn(1,100);
y = 7.*randn(1,100);
plot(randn(1,100));
drawnow
end

如果我这样做的话,那么图(1)当然会非常平滑地绘制,很好地显示x,而不会在图之间"闪烁",但现在我无法显示图(2)或y!

如何在不"闪烁"的情况下,在不同图形(而非子图形)上平滑地绘制这两个量?

编辑:

感谢Geodesic的回答,解决方案是有效的,但有一个微妙的问题,我不认为会是一个问题,无论它是什么。

1) 我无法在此解决方案中使用"imagesc"。

例如,

figure(1);
aone = axes;
figure(2);
atwo = axes;
for p = 1:100
x = 4.*randn(1,100);
y = 7.*rand(10,100);

plot(aone,x);
drawnow;
imagesc(atwo,y);
drawnow;
end

在这种情况下,带有imagesc(atwo,y)的部件崩溃。

你的闪烁是因为你通过循环一次又一次地生成每个图形窗口,这迫使窗口每次都出现在前台。首先生成数字,将一些轴连接到它们上,并将数据绘制到每个轴上,如下所示:

figure(1);
aone = axes;
figure(2);
atwo = axes;
for p = 1:100
x = 4.*randn(1,100);
y = 7.*randn(1,100);

plot(aone,randn(1,100));
drawnow;
imagesc(y,'Parent',atwo);
drawnow;
end

Edit:像plot这样的函数直接接受轴参数,但imagesc不接受。在这种特殊情况下,您需要将属性名称/值对作为参数发送进来。生成的图像的"父"将是我们的轴atwo(见上文)。

对于p=1,使用plot命令或imagesc命令创建所需的绘图。通过获取一个输出参数来保留生成的图形对象的句柄:例如h = plot(....h = imagesc(....。这将是一个Handle Graphicslineseriesimage对象,或其他对象,具体取决于您创建的特定打印类型。

对于p=2:100,不要直接使用打印命令,而是更新原始Handle Graphics对象h的相关Data属性。例如,对于由plot命令生成的lineseries对象,将其XDataYData属性设置为新数据。对于由imagesc命令生成的image对象,将其CData属性设置为新图像。

如有必要,在更新后调用drawnow以强制刷新图形队列。

相关内容

  • 没有找到相关文章