Home > Blockchain >  Set XTick of yyaxis to have integer ticks only
Set XTick of yyaxis to have integer ticks only

Time:11-16

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.

Please help!


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.

CodePudding user response:

It is actually the 'XTickMode' property which sets to 'manual' when you do:

ax = gca;
ax.XTick = unique(round(ax.XTick));

You can change that back to 'auto' to have the new xticks evaluated before you try to keep only unique rounded values. i.e.

ax = gca;
ax.XTickMode= 'auto';
ax.XTick = unique(round(ax.XTick));
  • Related