2016-03-08 128 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') 

問題的根源,是一軸可實際持有許多地塊,因此,如果您只需創建一個新的情節和其指定爲孩子的軸,其他情節對象仍然存在。

如果您每次繪製一些東西(通過調用barsurfc)創建全新的圖形對象,使用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')