2014-02-19 57 views
1

我已閱讀另一個colormap線程http://www.mathworks.com/matlabcentral/answers/101346上的帖子推薦的文章,我理解這個概念。我在使用bar(z,'stacked')函數時無法理解CDATA的值。使用條紋(z,'stacked')的多個顏色地圖

我有一個圖,主軸使用cmap繪製,我創建並定位了一個新的軸線圖,我希望它使用cmap2

例如,我的代碼包括:

maps = colormap([cmap;cmap2]); 
bH = bar(z,'stacked'); 

其中Z = 25×10

現在,當我看CDATA

get(bH,'CDATA')小區(10年超過25點的年度數據)數組的大小爲1x10,每個單元格包含字符串'scaled'。

現在,如果我看看每個孩子

childH = get(bH,'children'); 
get(childH{i},'CDATA') 

尺寸25×10的矩陣具有相同的每個值返回的CDATA

例如childH{i}CDATA是具有所有值= i

所以,我怎麼可以擴展這些映射到我的colormap因爲 從文檔上面我需要執行一個尺寸25×10的矩陣:

m = size(colormap,1); % Number of colors in the current colormap 
Data = get(H,'CData') % Where H is a handle to a surface or patch object 
cmin = min(CData(:)); % Minimum color value 
cmax = max(CData(:)); % Maximum color value 
idx = min(m,round((m-1)*(CData-cmin)/(cmax-cmin))+1); 

idx變得min(m,nan)這總是m

我真的需要幫助理解這一點。

我錯過了什麼,或者這個功能是一個特例嗎?

+0

特殊情況,種類:'bar'返回'barseries'的句柄而不是像'surface'或'patch'這樣的原始圖形對象,因此'bH'沒有'CData'屬性(儘管你的結果暗示它_does_有一個沒有記錄的'CDataMapping'屬性)。你是對的,你需要處理它的孩子,這是實際的「補丁」對象 - 我沒有Matlab來交出一個實際的答案,對不起。 – Notlikethat

回答

0

首先確保cmap2具有您想要使用的顏色的數量,然後獲取barseries對象以直接映射到它。例如:

childH = get(bH, 'children'); 
for a = 1:numel(childH) 
    C = get(childH{a}, 'FaceVertexCData'); 
    C(:) = a+size(cmap, 1); 
    set(childH{a}, 'FaceVertexCData', C, 'CDataMapping', 'direct'); 
end 
+0

這將做到這一點。我現在需要了解一下FaceVertexCData屬性。非常感謝 – andy