Reversing y axis direction causes xticks to invert and overlap with labels

조회 수: 19 (최근 30일)
I just switched from 2015a to 2018b and encounted a problem with the xticks and corresponding labels whenever I invert the y-axis. The Xtick direction seems reversed from the set value (in or out) and they overlap with the labels. I have no clue how to fix this.
Thanks!
subplot(1,3,1)
plot(rand(10,1),rand(10,1).*(1E-8))
subplot(1,3,2)
plot(rand(10,1),rand(10,1).*(1E-8))
set(gca,'Ydir','reverse')
subplot(1,3,3)
plot(rand(10,1),rand(10,1).*(1E-8))
set(gca,'Ydir','reverse')
set(gca,'TickDir','out')
  댓글 수: 4
Star Strider
Star Strider 2018년 11월 21일
My pleasure!
Consider posting the MathWorks reply in a Comment here.
Kelly Hokanson
Kelly Hokanson 2018년 11월 21일
편집: Kelly Hokanson 2018년 11월 21일
From the support team:
"I have been investigating the issue for a while now and unfortunately have not been able to come up with a workaround yet. I believe the issue is caused due to the presence of the exponent in the yaxis. The code snippet you provided on the MATLAB Answers page works as expected when (1E-8) exponent is not present.
If the exponent value of the y data is known previously, perhaps we could plot the y data without the exponent and specify the exponent in the ylabel. The following example shows how we may be able to achieve this.
>> f=figure;
>> x=1:10; y=rand(10, 1)*(1E-8);
>> Exp = max(floor(log10(y)));
>> plot(x, y*(10^-Exp));
>> ylabel(strcat(' x 10e', num2str(Exp)))
>> set(gca, 'Ydir', 'reverse')

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

채택된 답변

Samuel Coakley
Samuel Coakley 2019년 5월 31일
편집: Samuel Coakley 2019년 5월 31일
So I ran into the same problem and my solution is below.
Say you are plotting some data in A. Instead of plotting just A, plot -A and change the y tick labels. This means you don't have to reverse the axis so the x tick labels are still in the right place.
plot(1:length(A), -A)
yt = get(gca,'YTickLabel');
for ii=1:length(yt)
ytt{ii} = yt{ii}(2:end); % This trims the minus sign from the negative numbers
end
set(gca, 'YTickLabel', ytt)

추가 답변 (2개)

Stefanie Schwarz
Stefanie Schwarz 2021년 3월 22일
편집: Stefanie Schwarz 2021년 3월 22일
This is a bug in R2018b that was fixed in R2019a. See the following Bug Report:
A workaround is to set the Y-axis label to text and insert spaces.
Example:
>> set(gca, 'YTickLabel', {'0 ', '1 ', '2 ', '3 ', '4 '})

Robert Weigel
Robert Weigel 2021년 5월 13일
Adding an empty subscript worked for the case when the x-tick labels have exponents.
xtl = get(gca,'XTickLabel'); % {'10^{1}', '10^{2}'}
for i = 1:length(xtl)
xtl{i} = [xtl{i},'_{ }']; % Append empty subscript
end
set(gca,'XTickLabel',xtl);

카테고리

Help CenterFile Exchange에서 Axis Labels에 대해 자세히 알아보기

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by