Matlab 2016a - как получить xTickLabels только для некоторых xTicks на изображениях?

Я пытаюсь создать тепловую карту 24x366, используя imagesc с осью x, помеченной в 13 равномерно расположенных точках как {'15 января','15 февраля',...,'15 декабря','16 января'}, и ось Y помечена в каждой строке от 1 до 24, например:

Желаемые оси изображений

Когда я запускаю скрипт, он отображает ось Y так, как я этого хочу, но отображает только первую метку на оси X и игнорирует остальные. Я могу заставить это работать для сюжета, но я не могу заставить его работать для изображений. Я включил свой сценарий ниже. Кто-нибудь знает, как заставить изображения отображать все 13 меток по оси x через равные промежутки времени?

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)

person Nathan Williams    schedule 06.12.2016    source источник


Ответы (1)


Проблема с вашим кодом заключается в том, что ваш единственный из ваших тиков из testspacing попадает в диапазон графика testspacing=[1 43201 ...]. Вы можете проверить диапазон вашей оси X, запустив xlim без каких-либо аргументов.

Вы можете масштабировать testspace в соответствии с вашей осью 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)

или вы просто правильно генерируете testspace. Поскольку вы в любом случае ставите собственные метки на ось, вы можете просто выбрать использование testspacing = [0:30.5:366] или testspacing = [0:30:366] в зависимости от того, что вы хотите. Это также поможет вам отлаживать собственный код позже.

С другой стороны, вы должны подумать об уменьшении количества ярлыков в целом и решить, какие из них действительно полезны. Может быть, каждый 2-й или 3-й месяц достаточно. Вы можете «удалить» отдельные метки, установив для них пустые строки ''.

person E. Odj    schedule 06.12.2016