14

如果f是图形手柄,我想像使用plot3(..)一样使用它plot(..),但这不起作用:

>> plot3(f, t, real(Y), imag(Y))
Error using plot3
Vectors must be the same lengths.

然后我发现这样做的方法是:

  1. 首先使相关的数字成为当前的。

  2. 然后使用该plot3(..)功能。

我可以找到当前图形正在使用的内容gcf,但是如何使图形成为当前图形(通过其句柄)?

4

4 回答 4

32

这种方法有我个人的喜好:

set(0, 'currentfigure', f);  %# for figures
set(f, 'currentaxes', axs);  %# for axes with handle axs on figure f

因为这些命令是它们自己的文档。我发现

figure(f)

初读之类的令人困惑的东西-您是否创建了一个新人物?还是仅仅激活现有的?-> 需要更多地阅读上下文。

于 2012-10-08T06:26:01.237 回答
9

它实际上就像将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(..)

于 2012-10-08T04:43:59.230 回答
4

而其他人已经为您提供了您所要求的内容(如何制作轴或绘制当前轴)。我首选的处理方法是在调用plot3.

如果查看文档,您将看到可以将父轴指定为函数的第一个参数。如果看起来您试图在示例中执行此操作,但您提供了一个figure而不是axes的句柄。

f = figure()
ax = axes('Parent', f)
im = plot3(ax, X, Y, Z);

或者,我更喜欢显式解决方案

im = plot3(X, Y, Z, 'Parent', ax)

父对象的这个显式参数/值规范的好处是它被所有图形对象接受。类似plotplot3的函数实际上是辅助函数,它们包装了 的功能line并允许首先传递父级的约定。无论您是使用更高级别的函数(plot, plot3, imshow)还是更低级别的对象(line,image等) ,参数/值方法都被广泛接受

这里的两个好处是您消除了 MATLAB 试图找出放置绘图的位置的开销,而且它还可以防止 MATLAB 不得不更改当前显示的图形,从而强制重新渲染,这是 MATLAB 最慢的任务之一。

于 2016-01-10T13:46:29.580 回答
0

给图起个句柄名字,给大家举个小例子

  f1 = figure;
  imshow(image1);
  f2 = figure;
  imshow(image2);
  % edit image 1
  figure(f1);
  text(2,3,'done');
于 2014-05-08T17:27:00.610 回答