在Matlab中绘制热图并旋转xtick标签时xticklabel_rotate中的问题或错误

时间:2011-01-21 20:49:41

标签: matlab label rotation heatmap

我在Matlab中使用标签绘制热图,主要使用函数 imagesc 绘制热图, xticklabel_rotate 旋转xtick标签。 (please see here for xticklabel_rotate)。 它通常运作良好。但是今天我遇到了一些问题,这个问题似乎是由xticklabel_rotate(或者xticklabel_rotate使用的Matlab text 句柄?)引起的。

为了说明这个问题,在下面我打印我的代码和代码生成的结果(基本上,它的作用是随机生成一个正态分布的数据矩阵,使用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);       

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

http://i52.tinypic.com/smazoj.jpg

请注意,该错误是,由于调用xticklabel_rotate,图框的右侧和ytick标签都没有绘制。

问题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(axisFontsize)的 fontsize 不同。其次,xtick标签与列(xticks)未对齐:一些标签更近,一些更远。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

PS。我同意如果MatLab中固有这个功能会很好。如果是的话,我就不用这个了。

答案 1 :(得分:0)

如果你注释掉这一行:

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

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