Matlab 使用条形图的多个彩色贴图(z,';堆叠';)

Matlab 使用条形图的多个彩色贴图(z,';堆叠';),matlab,Matlab,我读过另一篇colormap帖子推荐的文章,我理解这个概念。使用bar(z,'stacked')功能时,我无法理解CDATA的值 我用cmap绘制了一个带有长轴的图形,我为条形图创建并定位了一个新轴,我希望它使用cmap2 例如,我的代码包括: maps = colormap([cmap;cmap2]); bH = bar(z,'stacked'); 式中z=25x10(25个站点10年的年度数据) 现在,当我看到CDATA get(bH,'CDATA')返回一个大小为1x10的单元格数组

我读过另一篇
colormap
帖子推荐的文章,我理解这个概念。使用
bar(z,'stacked')
功能时,我无法理解
CDATA
的值

我用
cmap
绘制了一个带有长轴的图形,我为条形图创建并定位了一个新轴,我希望它使用
cmap2

例如,我的代码包括:

maps = colormap([cmap;cmap2]);
bH = bar(z,'stacked');  
式中z=25x10(25个站点10年的年度数据)

现在,当我看到
CDATA

get(bH,'CDATA')
返回一个大小为1x10的单元格数组,每个单元格包含字符串“scaled”

现在,如果我看一下每个孩子的
CDATA

childH = get(bH,'children');
get(childH{i},'CDATA')
返回大小为25x10的矩阵,每个值相等

e、 g.
childH{i}
CDATA
是一个大小为25x10的矩阵,其所有值
=i

那么,我如何将它们缩放到我的
colormap
中呢 根据以上文档,我需要执行以下操作:

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

我真的需要帮助理解这一点


我是否遗漏了某些内容,或者此函数是一种特殊情况?

首先确保
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

特殊情况,类似:
bar
返回
barseries
的句柄,而不是像
surface
patch
这样的基本图形对象,因此
bH
没有
CData
属性(尽管您的结果暗示它确实有一个未记录的
CDataMapping
属性)。你是对的,你需要处理它的子对象,这些子对象是实际的
补丁
对象-我手头没有Matlab来计算实际的答案,对不起,这样就可以了。我现在需要了解一下FaceVertexCData属性。谢谢