필터 지우기
필터 지우기

Set XTick of yyaxis to have integer ticks only

조회 수: 62 (최근 30일)
hmhuang
hmhuang 2021년 11월 15일
댓글: dpb 2021년 11월 15일
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.
  댓글 수: 3
hmhuang
hmhuang 2021년 11월 15일
편집: hmhuang 2021년 11월 15일
@Adam Danz My xticks are actually changing in each iteration, not fixed as your example shown. Can you please have a look at my updated post? Thanks!
Adam Danz
Adam Danz 2021년 11월 15일
Then you probably just need to set xlim.

댓글을 달려면 로그인하십시오.

답변 (1개)

dpb
dpb 2021년 11월 15일
편집: dpb 2021년 11월 15일
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.
  댓글 수: 5
Adam Danz
Adam Danz 2021년 11월 15일
편집: Adam Danz 2021년 11월 15일
In the example from your question,
% To show the full plot from the start of the animation
ax = gca();
ax.XLim = [1,max_iter];
ax.XTick = unique(round(linspace(1,max_iter, 10))); % for up to 10 ticks
or
% To animate the x axis limits
ax = gca();
ax.XLim = [0,iter];
ax.XTick = unique(round(linspace(1,max_iter, 10))); % for up to 10 ticks
dpb
dpb 2021년 11월 15일
...
xtk=xticks;
xticks(xtk(xtk==fix(xtk)))
end

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by