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属性。谢谢