web-dev-qa-db-ja.com

Matlab-フィギュアを最新にする方法?軸を最新にする方法は?

fが図のハンドルである場合、plot3(..)を使用するのと同じようにplot(..)を使用したかったのですが、これは機能しませんでした。

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

次に、これを行う方法は次のとおりであることを理解しました:

  1. まず、関連する数値を作成しますcurrent

  2. 次に、plot3(..)関数を使用します。

現在の図がgcfを使用して何を見つけることができますが、どのようにして(ハンドルを介して)図を現在にできますか?

13
Evgeni Sergeev

この方法には個人的な好みがあります:

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

これらのコマンドは独自のドキュメントであるためです。見つけた

figure(f)

初めて読んだときに混乱するようなもの-新しい図を作成しますか?または単に既存のものをアクティブにしますか? ->コンテキストをさらに読む必要があります。

30
Rody Oldenhuis

実際には、ffigure(..)コマンドにフィードバックするのと同じくらい簡単です。

_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のハンドルで機能します。

8
Evgeni Sergeev

他の人があなたが要求したものを正確に提供していますが(どのように軸を作成するか、現在のものを図にするか)これに対処するための私の好ましい方法は、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グラフィックスオブジェクトによって受け入れられることです。 plotplot3などの関数は、実際にはlineの機能をラップし、最初に親を渡すという慣例を可能にするヘルパー関数です。高レベルの関数(plotplot3imshow)を使用しているか、低レベルのオブジェクト(lineimageなど)

ここでの2つの利点は、プロットを配置する場所を把握しようとするMATLABのオーバーヘッドを取り除くことです。また、MATLABが現在表示されている図を変更する必要がなくなり、MATLABの最も遅いタスクの1つである再レンダリングを強制します。

4
Suever

図にハンドル名を付けて、少し例を挙げてください

  f1 = figure;
  imshow(image1);
  f2 = figure;
  imshow(image2);
  % edit image 1
  figure(f1);
  text(2,3,'done');
0
neouyghur