如果f
是数字句柄,我想在其上使用plot3(..)
,就像我使用plot(..)
一样,但这不起作用:
>> plot3(f, t, real(Y), imag(Y))
Error using plot3
Vectors must be the same lengths.
然后我发现这样做的方法是:
首先制作相关数字 current 。
然后使用plot3(..)
功能。
我可以找到当前数字使用gcf
的内容,但如何使数字显示为当前(通过其句柄)?
答案 0 :(得分:26)
此方法有我个人的偏好:
set(0, 'currentfigure', f); %# for figures
set(f, 'currentaxes', axs); %# for axes with handle axs on figure f
因为这些命令是他们自己的文档。我找到了
figure(f)
在第一次阅读时会感到困惑 - 你是否创造了一个新的形象?或仅仅使一个现有的活跃? - >需要更多地阅读上下文。
答案 1 :(得分:8)
实际上就像将f
反馈给figure(..)
命令一样简单:
figure(f) %Makes the figure current.
另外,如果我做了这样的事情:
f = figure('IntegerHandle','off'); % With unique, non-reusable handle.
top = subplot(2, 1, 1);
bot = subplot(2, 1, 2);
然后我可以通过发出如下命令来使轴 top
或bottom
成为当前命令:
subplot(top);
这也有效:
axes(top);
但是两种类型的句柄不能混合:axes(..)
和subplot(..)
处理轴句柄,而figure(..)
适用于图形句柄。
答案 2 :(得分:4)
虽然其他人已经为您提供了您所要求的(如何制作轴或计算当前轴)。处理此问题的首选方法是在调用plot3
时明确指定绘图的父级。
如果查看documentation,您将看到可以将父轴指定为函数的第一个参数。如果您在示例中看起来像是尝试执行此操作,但是您提供了数字而非轴的句柄。
f = figure()
ax = axes('Parent', f)
im = plot3(ax, X, Y, Z);
或者,我更喜欢显式解决方案
im = plot3(X, Y, Z, 'Parent', ax)
关于父级的显式参数/值规范的好处是它被所有图形对象接受。像plot
和plot3
这样的函数实际上是包含line
功能的辅助函数,并允许首先传递父项的约定。无论您是使用更高级别的功能(plot
,plot3
,imshow
)还是更低级别的对象(line
,都可以广泛接受参数/值方法,image
等。)
这里的两个好处是你删除了MATLAB的开销,试图弄清楚你的绘图放在哪里,它也阻止了MATLAB必须改变当前显示的图形,强制重新渲染,这是MATLAB的一个最慢的任务。
答案 3 :(得分:0)
给出句柄名称,给你一个小例子
f1 = figure;
imshow(image1);
f2 = figure;
imshow(image2);
% edit image 1
figure(f1);
text(2,3,'done');