请创建两个函数,以便能够重现我的意思:
第一个功能:
function testPlot1()
pointData = rand(20000,3);
figure;
%hold on; % <- if commented out, does not work
plot3(pointData(:,1), pointData(:,2), pointData(:,3),'Marker', '.', 'MarkerEdgeColor', 'b','MarkerSize', 5, 'LineStyle', 'none');
axis equal;
xh = xlabel('X');
yh = ylabel('Y');
zh = zlabel('Z');
set([xh,yh, zh],...
'fontweight','bold',...
'fontsize',14,...
'color',[0,0,0]);
view(0,20);
end
第二功能:
function testPlot2(fighandle)
axes(fighandle);
hold on;
plot3([0 3],[0 3],[0 3], 'r', 'LineWidth', 10);
end
如果你现在打电话
testPlot1();testPlot2(gca)
您将获得以下内容:
如果您取消注释&#34;抓住&#34;在testPlot1()中再次调用上面的语句,你将得到:
对我来说这是不明确的行为。在第一种情况下,testPlot1()创建一个图形,将点云绘制到其中并修改轴属性。然后调用testPlot2(gca)将该行添加到图中,但该行被剪裁。 然而,在第二种情况下,线不再被修剪。为什么它现在没有剪裁,以前它是?
这似乎与我在testPlot1()中的axis属性中所做的更改有关。有人可以向我解释这种行为吗? (为什么它与hold持有效,我的轴属性的变化是什么原因)
答案 0 :(得分:0)
hold on
是一个Matlab命令(hold off
再次将其关闭),您可以在一个图形上绘制多个元素,而不会删除之前的元素。
如果你调用plot
函数,会创建一个数字(或者使用已经存在的数字!),Matlab会在该数字中绘制一个 new 图。该图中的先前情节已经消失。
如果您想为地块添加更多积分,可以拨打hold on
,然后再次拨打plot
,这次使用不同的号码,也可以使用不同的颜色。
但,如果您忘记再次为活动数字转换hold off
,您所做的任何绘图活动(如plot
)都会添加到图中。这就是您问题中第二张图片中出现的情况。您在0到1的范围内绘制了一些点,然后在第二个函数中添加了一些,但是在2到3的范围内。结果,轴扩展到0到3的范围。
或者,您可以调用figure
,这会导致出现新的数字。 figure_handle = figure();
将返回一个数字句柄,您可以将其传递给您的函数,以防您有多个数字,并希望在一段时间后更改其中一个。