我在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没有旋转)。
我希望我的问题在上面说清楚。任何有关解决问题的建议都将受到高度赞赏。非常感谢你。
答案 0 :(得分:1)
作为xticklabel_rotate
的作者,我试图重现所提到的错误,但收效甚微。我发现当y标签位于右侧时轴位置发生了变化的问题,我将对此进行研究。当我运行相同的例子时,我没有得到如你所示的那种显着的错误,所以我不知道如何回应。打印图形时请验证是否存在这些问题,这不是一个简单的显示问题。
文本框以数据单位的刻度位置创建。它们是中间对齐的,没有更多可以做的,但我愿意接受建议。
PS。我同意如果MatLab中固有这个功能会很好。如果是的话,我就不用这个了。
答案 1 :(得分:0)
如果你注释掉这一行:
set(gca, 'YAxisLocation', 'right')
然后它应该按预期工作。似乎XTICKLABEL_ROTATE函数不支持正确的y标签。您应该联系原作者,让他知道可能的错误......