Matlab 2016a - 如何在imagesc上的某些xTick上获取xTickLabels?

时间:2016-12-06 03:59:21

标签: matlab heatmap axes

我正在尝试使用imagesc创建一个24x366热图,x轴标记为13个均匀间隔点,如{'jan 15','feb 15',...,'dec 15','jan 16' },以及从1到24的每一行标记的y轴,如下所示:

Desired imagesc axes

当我运行脚本时,它会根据需要显示y轴,但它只显示x轴上的第一个标签而忽略其他标签。我可以让这个用于绘图,但我不能让它为图像工作。我在下面提供了我的脚本。有谁知道如何使图像c以均匀间隔的间隔在x轴上显示所有13个标签?

mylabels = {'jan 15','feb 15','mar 15','apr 15','may 15','jun 15','jul 15','aug 15','sep 15','oct 15','nov 15','dec 15','jan 16'};  
testspacing = (1:(60*24*30):528480);  
figure  
imagesc(rand(24,366))  
set(gca,'XTick',testspacing,'XTickLabel',mylabels,'XTickLabelRotation',45,'YTick',1:24,'YTickLabel',1:24)

1 个答案:

答案 0 :(得分:0)

您的代码存在的问题是testspacing中您唯一的一个刻度线位于地块testspacing=[1 43201 ...]的范围内。您可以通过运行xlim而无需任何参数来检查x轴的范围。

您可以重新缩放测试间距以适合您的x轴,例如像:

xmax = 366;
mylabels = {'jan 15','feb 15','mar 15','apr 15','may 15','jun 15','jul 15','aug 15','sep 15','oct 15','nov 15','dec 15','jan 16'};  
testspacing = (1:(60*24*30):528480);
testspacing = testspacing/max(testspacing)*xmax;  
figure  
imagesc(rand(24,xmax))  
set(gca,'XTick',testspacing,'XTickLabel',mylabels,'XTickLabelRotation',45,'YTick',1:24,'YTickLabel',1:24)

或者您只是正确生成testspacing。由于您无论如何都要在轴上放置自己的标签,因此您可以根据需要选择使用testspacing = [0:30.5:366]testspacing = [0:30:366]。这也可以帮助您稍后调试自己的代码。

另外请注意,您应该考虑减少标签的数量,并确定哪些标签确实有用。也许每隔2个月或第3个月就够了。你可以"删除"单个标签,将它们设置为空字符串''