如果f
是图形手柄,我想像使用plot3(..)
一样使用它plot(..)
,但这不起作用:
>> plot3(f, t, real(Y), imag(Y))
Error using plot3
Vectors must be the same lengths.
然后我发现这样做的方法是:
首先使相关的数字成为当前的。
然后使用该
plot3(..)
功能。
我可以找到当前图形正在使用的内容gcf
,但是如何使图形成为当前图形(通过其句柄)?
如果f
是图形手柄,我想像使用plot3(..)
一样使用它plot(..)
,但这不起作用:
>> plot3(f, t, real(Y), imag(Y))
Error using plot3
Vectors must be the same lengths.
然后我发现这样做的方法是:
首先使相关的数字成为当前的。
然后使用该plot3(..)
功能。
我可以找到当前图形正在使用的内容gcf
,但是如何使图形成为当前图形(通过其句柄)?
这种方法有我个人的喜好:
set(0, 'currentfigure', f); %# for figures
set(f, 'currentaxes', axs); %# for axes with handle axs on figure f
因为这些命令是它们自己的文档。我发现
figure(f)
初读之类的令人困惑的东西-您是否创建了一个新人物?还是仅仅激活现有的?-> 需要更多地阅读上下文。
它实际上就像将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(..)
而其他人已经为您提供了您所要求的内容(如何制作轴或绘制当前轴)。我首选的处理方法是在调用plot3
.
如果查看文档,您将看到可以将父轴指定为函数的第一个参数。如果看起来您试图在示例中执行此操作,但您提供了一个figure而不是axes的句柄。
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 最慢的任务之一。
给图起个句柄名字,给大家举个小例子
f1 = figure;
imshow(image1);
f2 = figure;
imshow(image2);
% edit image 1
figure(f1);
text(2,3,'done');