2013-07-04 39 views
1

您可以隱藏zero values in a bar3 plot,但該解決方案是不直接適用hist3()即使解決方法在方式上類似。在hist3圖中隱藏零值(計數)

下面是基於imdilate()一種變通方法,需要圖像處理TB,我想看看建議工具箱獨立(僅統計TB是確定)。

% Example graph 
hist3([2 0; 0 1; 1 1],[2 2]) 

enter image description here

% handle to graph3d.surfaceplot 
h = get(gca,'child'); 

% retrieve the heights 
heights  = get(h,'Zdata'); 

% Index outer heights leaving a contour of zeros 
mask   = ~logical(imdilate(heights,ones(3))); 

% Set the zero heights to NaN 
heights(mask) = NaN; 

% Final result 
set(h,'ZData',heights) 

enter image description here

這裏發生了什麼heights

heights =... 
    [0  0  0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  1  1  0  0 
    0  0  0  0  0  0  1  1  0  0 
    0  0  0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0  0  0 
    0  1  1  0  0  0  1  1  0  0 
    0  1  1  0  0  0  1  1  0  0 
    0  0  0  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0  0  0] 
mask =... 
    [1  1  1  1  1  0  0  0  0  1 
    1  1  1  1  1  0  0  0  0  1 
    1  1  1  1  1  0  0  0  0  1 
    1  1  1  1  1  0  0  0  0  1 
    1  1  1  1  1  1  1  1  1  1 
    0  0  0  0  1  0  0  0  0  1 
    0  0  0  0  1  0  0  0  0  1 
    0  0  0  0  1  0  0  0  0  1 
    0  0  0  0  1  0  0  0  0  1 
    1  1  1  1  1  1  1  1  1  1] 
heights =... 
    [NaN NaN NaN NaN NaN  0  0  0  0 NaN 
    NaN NaN NaN NaN NaN  0  1  1  0 NaN 
    NaN NaN NaN NaN NaN  0  1  1  0 NaN 
    NaN NaN NaN NaN NaN  0  0  0  0 NaN 
    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
    0  0  0  0 NaN  0  0  0  0 NaN 
    0  1  1  0 NaN  0  1  1  0 NaN 
    0  1  1  0 NaN  0  1  1  0 NaN 
    0  0  0  0 NaN  0  0  0  0 NaN 
    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN] 
+0

有趣的事情,我開始調查這個,但最終解決了另一個問題:http://stackoverflow.com/a/17477348/97160。直到我完成後,我意識到你正在使用'hist3'而不是'bar3' :) – Amro

回答

3

您可以

更換
filter2(ones(3), height) 

conv2(ones(3), height, 'same') 

和既不需要的工具箱。

+0

+1現在你提到了,我還記得'conv2(height,ones(3),'same')'。如果你把它包含在你的答案中,我會等待一些其他答案並接受最好的答案。 – Oleg