2016-12-06 199 views
0

我试图创建一个24x366热图,使用imagesc,x轴标记为13个均匀间隔点{'jan 15','feb 15',...,'dec 15','jan 16'}和y轴标记在每行从1至24,这样的:Matlab 2016a - 如何获取xTickLabels仅在imagesc上的某些xTicks上?

Desired imagesc axes

当运行该脚本时,它显示在y轴上,因为我想,但它仅显示第一标签在x轴上并忽略其他。我可以得到这个工作的情节,但我无法得到它为一个imagesc工作。我在下面包含了我的脚本。有谁知道如何让图像以均匀的间隔在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) 

回答

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]。这也将帮助您稍后调试您自己的代码。

另一方面,您应该考虑减少一般标签的数量,并确定哪些标签真的有用。也许每个第二或第三个月就够了。您可以通过将各个标签设置为空字符串“删除”''