0

この投稿に続いて、実行時に4つのプロットを更新する関数があります。これは期待どおりに機能しますが、表示されるプロットを変更しようとすると、以前に表示されたプロットの残りがあるように見えます。barグラフからに移動しますsurfcが、棒はまだ平面上に表示されます。現在、データを設定して描画しています

set(hplot2, 'yData', ME)
drawnow

何らかの方法で軸/プロットを更新する必要がありますか? で軸上にあるプロットを変更しset(plot1, 'Parent', axes1)ます。どこで問題が発生しているのかわかりません。

4

1 に答える 1

2

2 つのプロットを切り替える場合は、次を使用して次のものをプロットする前に、軸をクリアする必要があります。cla

cla(axes1);

または、既存のプロット オブジェクトの可視性を単に切り替えたいと思うでしょう。

% To show only the bar plot
set(hbar, 'Visible', 'on')
set(hsurf, 'Visible', 'off')

% To show only the surf plot
set(hbar, 'Visible', 'off')
set(hsurf, 'Visible', 'on')

問題の根本は、Axes が実際には多くのプロットを保持できることです。そのため、単純に新しいプロットを作成し、それを子として Axes に割り当てると、他のプロット オブジェクトがまだ存在します。

bar何かを (またはを呼び出して) プロットするたびにまったく新しいグラフィックス オブジェクトを作成する場合は、 をsurfc使用claするのが最も簡単です。そうは言っても、既存のプロット オブジェクトを単純に更新するようにコードを調整できれば、パフォーマンスとグラフィックス管理の両方の観点から理想的です。

また、別の補足として。set(plot1, 'Parent', axes1)オブジェクトの作成後に使用することはお勧めしません。Parentオブジェクト コンストラクターでプロパティを直接指定する方が堅牢です。このようにして、必要な軸に直接移動することが保証されます。

plot1 = bar(data, 'Parent', axes1);    

編集

考えてみると、3D データと 2D データを切り替えているので、単純に2 つの軸を同じ場所に配置する方が簡単かもしれません (1 つは 用、もう 1 つは 用)。次に、必要に応じて軸の表示/非表示を切り替えます。このようにして、すべてのビュー設定が特定の軸に対して保持されます。barsurf

barax = axes();
surfax = axes();

% Ensure they are located at the same position
link = linkprop([barax, surfax], 'Position');

hbar = bar(data, 'Parent', barax);
hsurf = surfc(data, 'Parent', surfax);

% Toggle these to switch plots.
set(barax, 'Visible', 'off')
set(surfax, 'Visible', 'on')
于 2016-03-08T14:34:00.163 に答える