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 つは 用)。次に、必要に応じて軸の表示/非表示を切り替えます。このようにして、すべてのビュー設定が特定の軸に対して保持されます。bar
surf
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')