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

22 次查看(过去 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 个评论
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