【问题标题】:Fixing a clustergram column label misalignment修复 clustergram 列标签未对齐
【发布时间】:2018-01-18 07:29:00
【问题描述】:

在下面的代码中,我尝试用红色突出显示特定列。但是,生成的标签颜色条未与标签对齐,如图所示。我该如何纠正这个问题?

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);

【问题讨论】:

    标签: matlab alignment customization matlab-figure heatmap


    【解决方案1】:

    这绝对是 MATLAB 中的一个错误。我怎么知道?通过检查clustergram.plot 函数。

    如果我们在第 142 行设置断点positionAxes(obj, imAxes),并运行您的代码直到该点,我们会得到下图:

    对齐正确,但树状图不可见。然后,代码继续重新定位轴(主要是使它们更小),但不幸的是忽略了带有红色标签的底部。

    要了解如何解决这个问题,我们应该回到HeatMap.plot > initHMAxes 创建底部栏并找到其句柄的存储位置。然后,我们需要做的就是根据clustergram的其余部分(HeatMap)调整这个元素的position

    我将继续挖掘句柄/应用程序数据“作为对读者的练习”,但长话短说,只需将其添加到代码的末尾即可:

    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.
    

    所以从技术上讲,这不是错误,而是不受支持的功能。

    【讨论】:

    • 感谢您的回复!是的,该函数没有被修复的原因可能是因为它无论如何都会被删除,但我已经在调用 clustergram() 时将“LabelsWithMarkers”参数设置为“true”,我真的不知道如何不使用'ColumnLabelsColor' 参数并通过真/假参数 'LabelsWithMarkers' 获得相同的功能。看起来文档没有解释这一点。
    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2013-05-12
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多