MATLAB Answers

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

3 views (last 30 days)
AA
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

Accepted Answer

Rik
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 Comments
AA
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
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 Comment
AA
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
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,:))

Community Treasure Hunt

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

Start Hunting!

Translated by