在MATLAB中,如何清除最后绘制到图像的内容?

8
在MATLAB中,我将许多不同的向量绘制到一个图中。现在,我想做的是仅撤销我上次绘制到该图中的向量,而不清除其他所有内容。这可以实现吗?如何实现?
谢谢。
编辑:
figure(1); clf(1);
N = 100;
x = randn(1,N);
y = randn(1,N);
z = sin(1:N);
plot(x); hold on;
plot(y,'r');
plot(z,'k'); 

现在,我想删除最后一个制作的图表z。


你是否使用“hold”来绘制多个向量? - mola
以下是关于编程的内容,请将其翻译成中文。请仅返回翻译后的文本,并包含一些代码... - mola
3个回答

9

如果您在绘制之前就知道您想要稍后再次移除它,您可以保存由 plot 返回的句柄,并在之后使用 delete 删除它。

figure;
h1 = plot([0 1 2], [3 4 5]);
delete(h1);

啊!这很好。在这里它似乎可以工作。最后一件事,我正在这里创建一个句柄h1。有没有办法让它只从一个预先知道的图形编号中“获取”该句柄?例如,假设我制作了一个图形,“figure(9)”。现在我想仅在figure(9)上使用此技术。如何告诉它仅使用figure 9呢? - Spacey
@Learnaholic:只需查看@Ben的答案,他向您展示如何获取特定轴的句柄列表。如果您在figure(9)中绘制,可以通过再次执行 figure(9) 将当前图设置为 figure(9),然后使用 gcagcf 获取子句柄列表。 - groovingandi

8

尝试

items = get(gca, 'Children');
delete(items(end));

也许可以使用delete(items(1))的方式。


几乎... set(gca, ... 不起作用,但是 delete(items(1)) 应该可以解决问题。 - groovingandi
谢谢Ben,不幸的是这似乎不起作用。 :-( 附言:我在我的问题中添加了一些代码,这样你就可以看到了。 - Spacey
@groovingandi:哦,没错,你需要传入完全相同的列表,只是可以更改顺序。 - Ben Voigt
谢谢你们两个,你和groovegandi的回答都非常有帮助。 - Spacey

3

@groovingandi提供的答案是一般情况下最好的方式。你也可以使用FINDALL根据对象的属性查找句柄:

h = findall(gca, 'type', 'line', 'color', 'k');
delete(h);

这个功能会在当前图表中搜索所有黑色的线条对象(使用plot函数创建的是线条对象)。

如果要在第九张图表上执行此操作,您需要找到第九张图表对应的坐标轴。图表句柄仅为图表编号,因此:

ax = findall(9, 'axes');
h = findall(ax, 'type', 'line', 'color', 'k');
delete(h);

1
еңЁиҝҷйҮҢдҪҝз”Ёfindobjе°ұи¶іеӨҹдәҶпјҲFINDALLиҝҳдјҡйўқеӨ–жҹҘжүҫйҡҗи—Ҹзҡ„еҸҘжҹ„пјүгҖӮ - Amro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接