2

我一直在Matlab中绘制带有标签的热图,主要使用函数imagesc来绘制热图和xticklabel_rotate来旋转xtick标签。(请在此处查看 xticklabel_rotate)。它通常运作良好。但是今天我遇到了一些似乎是由 xticklabel_rotate 引起的问题(或者可能是 xticklabel_rotate 使用的 Matlab文本句柄?)

为了说明这个问题,在下面我打印我的代码和代码生成的结果(基本上,它的作用是随机生成一个正态分布的数据矩阵,使用 imagesc 为数据绘制热图,在顶部绘制它的标签并轴右侧,然后旋转 xticklabels):

function debug_xticklabelRotate(numX, numY, axisFontsize)
    data = randn(numY, numX);
    imagesc(data);
    colormap(jet);
    box on
    set(gca, 'ticklength', [0,0]);
    set(gca, 'xminortick', 'off', 'yminortick', 'off');
    set(gca, 'XAxisLocation', 'top');
    set(gca, 'YAxisLocation', 'right');
    set(gca,'FontSize', axisFontsize);
    axis image
    set(gca, 'Xtick', 1 : numX);
    htext = xticklabel_rotate([],90, [], 'fontsize', axisFontsize);
    set(gca, 'YTick', 1 : numY);
end

问题1:我用参数调用了上面的函数

debug_xticklabelRotate(40, 100, .5);       

输出图像如下所示(为了节省空间,我剪切了图像,只显示了前几行):

请注意,错误在于,调用 xticklabel_rotate 的结果是,图形框的右侧和 yticklabels 均未绘制。

问题2:当我使用参数调用上述函数时

debug_xticklabelRotate(40, 200, .5);  % only numY is changed from 100 to 200

输出图像如下所示(再次为了节省空间,我剪切了图像,只显示了前几行):

http://i55.tinypic.com/317grdd.png

与 numY=100 的调用相比,在此图中显示了数据图像和标签。但是,请注意这里有两个问题。首先,xticklabel的fontsize和yticklabel的fontsize(axisFontsize)不一样。其次,xtick 标签与列 (xticks)对齐不好:一些标签更近,一些更远。

请注意,如果我在我的函数 debug_xticklabelRotate 中删除 xticklable_rotate 的函数调用,所有这些提到的问题都消失了(除了现在 xticklabel 没有旋转)。

我希望我的问题在上面说明清楚。任何有关解决问题的建议都将受到高度赞赏。非常感谢。

4

2 回答 2

1

作为 的作者xticklabel_rotate,我试图重现提到的错误,但收效甚微。我发现当 y 标签位于右侧时轴位置发生更改的问题,我将对此进行研究。当我运行相同的示例时,我没有得到你所显示的明显的错位,所以我不知道如何回应。请在打印图时验证是否存在这些问题,而不是简单的显示问题。

文本框在刻度位置创建,以数据为单位。他们是中间对齐的,没有什么可以做的,但我愿意接受建议。

PS。我同意如果这个功能是 MatLab 所固有的,那就太好了。如果是这样,我就不必为此工作了。

于 2011-03-31T17:36:14.883 回答
0

如果您注释掉该行:

set(gca, 'YAxisLocation', 'right')

那么它应该按预期工作。XTICKLABEL_ROTATE 函数似乎不支持正确的 y 标签。您应该联系原作者并让他知道可能的错误...

于 2011-01-21T22:00:04.457 回答