MATLAB Answers

# How to modify the y-axis tick label and tick values (2016a)

3 views (last 30 days)
AA on 23 Jun 2021
Commented: AA on 24 Jun 2021
I have three variables day, time and z2 and i plot using imagesc. Below are the data information:
data information:
day 1*1420 double(each number is equal to 6 hours)
time 1*3001 double (this case has -300:300 with interval of 0.2)
z2 1420*3001 double
Later I converted the weeks segments into date by using below code.
fig=figure(ii);
h1=subplot(3,1,1);
imagesc(time,day,z2);
colormap(jet)
YTickStr = char(datetime('10/10/2018', 'InputFormat', 'dd/MM/yy', 'Format', 'dd/MM/yy') + hours(day*6));
set(gca, 'YTick', 1:lengday, 'YTickLabel', YTickStr);
xlim([-100 100]);
If i do not use any interval, ticks label are so difficult to read as below and I cant read any thing
Later, I change the interval with 1:500:lengday and it starts from 1JAN which i exected to start from 10/10/18.
How can I modify the code so that it gives me the interval based on Ytrickstr?
here is my failed attemt which gives me the first 5 values from YTickStr.
yval = ylim(gca);
set(gca,'YTick',linspace(yval(1),yval(2),5),'YTickLabel', YTickStr)
YTickStr files is like this
10/10/18
10/10/18
10/10/18
11/10/18
11/10/18
11/10/18
11/10/18
12/10/18
12/10/18
12/10/18
12/10/18
13/10/18
13/10/18
13/10/18
13/10/18
14/10/18
Thank you very much
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

Rik on 23 Jun 2021
Edited: Rik on 23 Jun 2021
The trick is to select part of your YTickStr:
L=round(linspace(1,size(YTickStr,1),5));
% use round to round to integer indices
yval=ylim;yval=linspace(yval(1),yval(2),numel(L));
%this is only approximate
set(gca,'YTick',yval,'YTickLabel', YTickStr(L,:))
%exact yval:
yval=yval(1) + diff(yval)* (L-1)./(numel(L)-1);
##### 6 CommentsShowHide 5 older comments
AA on 24 Jun 2021
For sure, I checked above script and it does not work that's why shared the modified code. We do not need to use Ylim. BTW, thanks again.

Sign in to comment.

### More Answers (2)

VBBV on 23 Jun 2021
yval = ylim(gca);
set(gca,'YTick',linspace(yval(1),yval(end),16),'YTickLabel', YTickStr)
Since you have YTickStr has 16 values, divide YTick into 16 values
##### 1 CommentShowHide None
AA on 23 Jun 2021
This is just a Ytickstr format,
I have 1420 values which are equals to lengday, not only 16.

Sign in to comment.

AA on 23 Jun 2021
imagesc(time,day,z2);
colormap(jet)
YTickStr = char(datetime('10/10/2018', 'InputFormat', 'dd/MM/yy', 'Format', 'dd/MM/yy') + hours(day*6));
yval = ylim(gca);
L=round(linspace(1,size(YTickStr,1),5));
set(gca,'YTick',day(:,L),'YTickLabel', YTickStr(L,:))
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by