3

マッピングツールボックスを利用する基本的なGUIをMATLABでプログラミングしています。GUIはグレースケール画像を表示し、データ上に離散点をプロットします。これらはすべて、必要な地図投影法上にあります。バニラデカルト空間ではなく、マップ軸(axesmコマンドによって作成された軸)にプロットすることが重要です。コマンドラインからこれらすべてを実行するのに問題はありませんが、GUIバージョンを実装する方法を見つけることができず、それが私を狂わせます。

問題は、マップ軸を親フィギュアの子として指定する必要があることです。通常の軸には、次のような設定が可能なプロパティがあります。

axesHandle = axes('Parent', parentHandle, ...);

また

set(axesHandle, 'Parent', parentHandle);

ただし、axesm関数によって作成されたマップ軸に相当する親プロパティがないため、Figure内の軸を操作する方法がありません。これどうやってするの?


更新:空の図のマップ軸内にプロットを作成すると、get(figureHandle、'Children')はaxesmオブジェクトのハンドルを返すため(@slaytonに感謝)、マップ軸オブジェクトを暗黙的に子に追加する必要がありますMATLABによる図の。

マップ軸が親の図を参照していないことを心配する必要がありますか、それともそのままにしておく必要がありますか?これはMATLABの典型的なケースであり、マニュアルで実装するように指示されている標準に準拠しないように強制されているのではないかと思います。

4

2 に答える 2

2

あなたの質問を読んで、あなたがやろうとしていることは、axesオブジェクトのハンドルをつかむことです。これは、軸またはサブプロットのいずれかを使用して軸が作成されるときに実行できます。

a = axes();
a = subplot(x,y,z);
% both return an handle to the newly created axes object

さらに、軸が次のような関数呼び出しによって自動的に作成される場合、plotまたはimage軸にそれを処理させることができる場合:

p = plot(1:10); %returns a handle to a line object
a = get(p,'Parent');

i = image(); %returns a handle to an image object
a = get(i, 'Parent');

最後に、これら2つのオプションはどちらも使用できません。次のようにして、含まれている図から常に軸ハンドルを取得できます。

a = get(figureHandle, 'Children');

ただし、Figureに複数の軸が含まれている場合、これは軸ハンドルのベクトルを返すことに注意してください。

最後に、描画するときは、マップイメージを含む軸にポイントを描画します。これを呼び出すだけです。

line(xPoints, yPoints, 'linestyle', 'none', 'marker', '.', 'color', 'r', 'size', 15)

これにより、大きな赤い点を使用して線の頂点が描画されます。

あなたが提供したコードがあなたが尋ねた質問と一致しないので、これがあなたの質問に答えるかどうかはわかりません。

提供したコードは、軸をある図から別の図に移動しようとしているように見えます。あなたは完全にこれを行うことができます!

f = figure('Position', [100 100 100 100]);
a = axes('Parent', f);
pause
f2 = figure('Position', [250 100 100 100]);
set(a,'Parent', f2);
于 2012-06-21T15:35:59.827 に答える
0

多くの試行錯誤とドキュメントを読んだ後、マップ軸の親を明示的に指定する方法がないことがわかりました。代わりに、それらは現在の軸の上に暗黙的に追加されます。現在の図に軸が存在しない場合、を呼び出すとaxesm、axesオブジェクトが作成され、axesmオブジェクトが内部に配置されます。このルートを使用する場合は、次のコマンドを呼び出して、Axesオブジェクトハンドルを取得する必要がありますgca

mapAxesHandle = axesm(...);
axesHandle = gca(...);

これにより、GUIを最初から作成するときにマッピングツールボックスを使用するのはイライラしますが、Mathworksがそれを実現する方法です。有用な情報を提供してくれた@slaytonに感謝します。私は賛成しますが、私の評判は15未満です:(

于 2012-06-27T21:18:58.813 に答える