在下面的代码中,我尝试用红色突出显示特定列。但是,生成的标签颜色条未与标签对齐,如图所示。我怎么能纠正这个?
datdat = randn(5,10);
regregnames = {'A', 'B', 'C', 'D', 'E'};
colors = cell(1,size(datdat,2));
for i=1:size(datdat,2)
colors{i} = [1,1,1];
end
colors{3} = [1,0,0];
s.Labels = arrayfun(@num2str, 1:size(datdat,2), 'UniformOutput', false);
s.Colors = colors;
clscls = clustergram(datdat, 'RowLabels', regregnames, 'ColumnLabels', s.Labels, 'ColumnLabelsColor', s, 'LabelsWithMarkers', true);
答案 0 :(得分:1)
这绝对是MATLAB中的一个错误。我怎么知道?通过检查clustergram.plot
函数。
如果我们在第142行设置断点positionAxes(obj, imAxes)
,并运行您的代码直到那一点,我们得到下图:
其中对齐方式正确,但树形图不可见。然后,代码继续重新定位轴(主要是使它们更小),而不幸的是忽略了带有红色标签的底部。
要了解如何解决这个问题,我们应该稍微回过头来,HeatMap.plot > initHMAxes
创建这个底栏并查找其句柄的存储位置。然后,我们需要做的就是根据position
(clustergram
)的其余部分调整此元素的HeatMap
。
我将继续挖掘句柄/ appdata“作为读者的练习”,但长话短说,只需将其添加到代码的末尾:
hAx = struct(clscls).HMAxesHandle;
data = getappdata(hAx, 'HeatMapAxesData');
data.XMarkerAxes.Position = data.XMarkerAxes.Position.*[0 1 0 1] + hAx.Position.*[1 0 1 0];
结果:
顺便说一句,在R2017b上,我收到以下警告:Warning: COLUMNLABELSCOLOR is not supported and will be removed in a future release.
Use LabelsWithMarkers for similar functionality.
从技术上讲,这不是一个错误,而是一个不受支持的功能。