0

私は現在GUIに取り組んでいます。ユーザーの選択に応じて複数のプロットを表示できる 1 つの「軸」が必要です。現在、2 つのバー プロットと 2 つのサーフ プロットがあります。を使用してプロットを設定しています

set(p1, 'Parent', axes1)

ただし、サーフを持つ軸にバー プロットを設定すると、まだ z 軸が存在するように見えますが、同じ問題が逆に存在しますが、z 軸がありません。このサンプル スクリプトはデモンストレーションです。

figure(1);
a1 = axes();
p1 = bar(1:5);

figure(2);
a2 = axes();
x = [1 2];
z = zeros(2);
p2 = surfc(x, x, z);

set(p1, 'Parent', a2)
set(p2, 'Parent', a1)

これについて最善の方法は何ですか?

4

1 に答える 1

1

単一の軸のみを使用している場合は、3D (プロット用) から 2D (プロット用) に変更するときにビューを変更できます。surfcbar

% Default 2D View
view(hax, 2);

% Default 3D View
view(hax, 3);

ユーザーが 2 つのビューを切り替えることを許可している場合は、デフォルトの 2D ビューと 3D ビューを使用するのではなく、ボタン クリック コールバックで現在のビューを変数に保存し、プロットに戻ったときに使用する価値があるかもしれません。ユーザーが適用した任意のカスタム ビューポイントを保持します。次の方法で現在の視点を取得できます。

[az, el] = view(hax);

ミニラン

また、一般に、構築時にプロット オブジェクトの親を割り当てるのが最善です。ほとんどすべてのグラフィックス オブジェクト コンストラクターは、Parentパラメーターと値のペアを受け入れます。プロットオブジェクトが間違った軸に描画されることがないため、その方法ははるかに堅牢です。

fig1 = figure();
ax1 = axes('Parent', fig1);
p1 = bar(1:5, 'Parent', ax1);

fig2 = figure();
ax2 = axes('Parent', fig2);
p2 = surfc([1 2], [1 2], zeros(2), 'Parent', ax2);

MATLAB グラフィックスを扱うとき、Axes、プロット、およびその他のグラフィックス オブジェクトを作成するときに、親について明示することが有益であることが常にわかってきました。gca、などに依存しないgcfでください。ユーザーがレンダリングの途中で何らかの方法でクリックすると、これらはすべて変化します。

于 2016-03-07T16:14:01.530 に答える