Если вы переключение между двумя участками вы либо хотите очистить ось до черчения следующей вещи, используя 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')
Корень проблемы, является то, что оси могут провести на самом деле много участков, так что если вы просто создать новый сюжет и назначить его в качестве потомка к оси, другие объекты участка по-прежнему существует ,
Если вы создаете совершенно новые графические объекты каждый раз, когда вы замышляете что-то (путем вызова bar
или surfc
) с использованием cla
будет проще всего. При этом, если вы можете настроить свой код, чтобы просто обновить существующие объекты, которые идеально подходят как с точки зрения производительности, так и с точки зрения управления графикой.
Также, как другая сторона примечания. Я бы отказался от использования set(plot1, 'Parent', axes1)
после создания объекта. Более надежно указывать свойство Parent
непосредственно в конструкторе объекта. Таким образом, вы гарантируете, что он направит непосредственно на нужные вам оси.
plot1 = bar(data, 'Parent', axes1);
Редактировать
Теперь, когда я думаю об этом, так как вы переключаясь между 3D и 2D данных, может быть проще просто две оси в том же месте (один для 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')