2016-03-08 6 views
0

После this post У меня есть функция, которая при запуске обновляет 4 графика. Это работает, как и ожидалось, за исключением случаев, когда я перехожу к изменению сюжета, похоже, что есть остатки ранее отображаемого сюжета. Я перехожу из графика bar в surfc, но я все еще вижу полосы через плоский самолет. В настоящее время я устанавливаю свои данные и чертеж с помощьюДинамическое построение нескольких графиков, отображаемых на одном наборе осей (по одному графику за раз)

set(hplot2, 'yData', ME) 
drawnow 

Нужно ли как-нибудь обновить топоры/сюжет? Я изменяю, какой график находится на осях с set(plot1, 'Parent', axes1). Я понятия не имею, где возникает проблема.

ответ

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') 

Корень проблемы, является то, что оси могут провести на самом деле много участков, так что если вы просто создать новый сюжет и назначить его в качестве потомка к оси, другие объекты участка по-прежнему существует ,

Если вы создаете совершенно новые графические объекты каждый раз, когда вы замышляете что-то (путем вызова 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')