# Set XTick of yyaxis to have integer ticks only

42 views (last 30 days)
hmhuang on 15 Nov 2021
Commented: dpb on 15 Nov 2021
I have a plot with double y axes using yyaxis. I want to set XTick to have only integer values, e.g., 1, 2, 3, 4, 5, 6, instead of 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6.
With normal plot, I can just use:
ax = gca;
ax.XTick = unique(round(ax.XTick));
to achieve this goal.
But this seems not the case for yyaxis plot.
---
Update: here is a MWE to illustrate my problem:
figure('Position', get(0, 'Screensize'));
max_iter = 100;
A_history = nan(1,max_iter); B_history = nan(1,max_iter);
for iter = 1 : max_iter
yyaxis left;
A_history(iter) = randn(1);
plot(A_history(1:iter), '-ob', 'LineWidth', 0.9, 'MarkerSize', 4.5, 'MarkerFaceColor', 'b');
ylabel('first yaxis');
yyaxis right;
B_history(iter) = randn(1);
plot(B_history(1:iter), '-or', 'LineWidth', 0.6, 'MarkerSize', 3, 'MarkerFaceColor', 'r');
ylabel('second yaxis');
% ax = gca;
% ax.XTick = unique(round(ax.XTick));
pause(1);
end
The above code will create xticks of 0, 0.1, 0.2, 0.3, 0.4, ..., 1 for the 1st iteration; xticks of 1, 1.1, 1.2, 1.3, 1.4, ..., 2 for the second iteration, for example.
What I want is to get rid of all the non-integer values (e.g., 0.1, ... ,0.9, 1.1, ... ,1.9) in the xticks, just leave integer values (e.g., 0,1 for the 1st iteration; 1,2 for the second iteration).
I have tried to add the commented 2 lines of code. But they don't give me the expected result, unfortunately. What's worse is that the xticks would become [0,1] all the time...
Hope this makes the problem description clearer.
Adam Danz on 15 Nov 2021
Then you probably just need to set xlim.

dpb on 15 Nov 2021
Edited: dpb on 15 Nov 2021
yyaxis right
plot(rand(1,20)*4, rand(1,20), '*')
yyaxis left
plot(rand(1,20)*6, rand(1,20), '*')
hAx=gca; % retrieve handle to current axes
hAx.YAxis(2).TickLabelFormat='%d'; % set RH y axis format string to integer
NB: the subscript on the YAxis handle array -- the specialized axes object created by yyaxis is a super axes container that has both LH and RH axes objects inside. The first array element is LH, the second the RH axis. dpb on 15 Nov 2021
...
xtk=xticks;
xticks(xtk(xtk==fix(xtk)))
end