f
が図のハンドルである場合、plot3(..)
を使用するのと同じようにplot(..)
を使用したかったのですが、これは機能しませんでした。
_>> plot3(f, t, real(Y), imag(Y))
Error using plot3
Vectors must be the same lengths.
_
次に、これを行う方法は次のとおりであることを理解しました:
まず、関連する数値を作成しますcurrent。
次に、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);
_
次に、次のようなコマンドを発行して、axestop
またはbottom
を最新のものにします。
_subplot(top);
_
これも機能します:
_axes(top);
_
ただし、2種類のハンドルを混在させることはできません。axes(..)
とsubplot(..)
はAxesのハンドルで機能し、figure(..)
はFigureのハンドルで機能します。
他の人があなたが要求したものを正確に提供していますが(どのように軸を作成するか、現在のものを図にするか)これに対処するための私の好ましい方法は、plot3
の呼び出しでプロットの親を明示的に指定することです。
documentation を見ると、親Axesを関数の最初のパラメーターとして指定できることがわかります。あなたの例でこれを試みたように見えますが、axesではなくfigureへのハンドルを提供した場合.
f = figure()
ax = axes('Parent', f)
im = plot3(ax, X, Y, Z);
あるいは、明示的な解決策を好む
im = plot3(X, Y, Z, 'Parent', ax)
親のこの明示的なパラメーター/値の仕様のいいところは、allグラフィックスオブジェクトによって受け入れられることです。 plot
やplot3
などの関数は、実際にはline
の機能をラップし、最初に親を渡すという慣例を可能にするヘルパー関数です。高レベルの関数(plot
、plot3
、imshow
)を使用しているか、低レベルのオブジェクト(line
、image
など)
ここでの2つの利点は、プロットを配置する場所を把握しようとするMATLABのオーバーヘッドを取り除くことです。また、MATLABが現在表示されている図を変更する必要がなくなり、MATLABの最も遅いタスクの1つである再レンダリングを強制します。
図にハンドル名を付けて、少し例を挙げてください
f1 = figure;
imshow(image1);
f2 = figure;
imshow(image2);
% edit image 1
figure(f1);
text(2,3,'done');