number format change in axes of graphs

I find that numbers on axes will be automatically displayed by common scale factor such as n power of ten when plotting a figure. It seems that n is usually 3 or bigger in absolute. Is it possible to scale it down to 2?
For example, 150 will be automatically displayed as 0.15 as the tick number with 10^3 on top of the y-axis, but it is expected to be 1.5 with 10^2 on top.
But I don't know how to realize it by code?
Could someone have a say? Thank you in advance.

1 Kommentar

LIU
LIU am 22 Jan. 2014
Bearbeitet: LIU am 22 Jan. 2014
Probably it's better for me to ask the question with the picture attached here:
Is it possible to adjust the numbers on the axes to be in no more than one digit both before and after decimal point for space saving and avoiding overlapping? Originally, I want the figure to be displayed as follows(it is done by adding text for illustration):
But, I don't know how to make it by coding since there are tens of graphs which would be time-consuming by hand tuning or setting. THank you in advance.

Melden Sie sich an, um zu kommentieren.

Antworten (4)

Bruno Pop-Stefanov
Bruno Pop-Stefanov am 20 Jan. 2014

1 Stimme

Please refer to this previous post for formatting tick labels:

3 Kommentare

LIU
LIU am 22 Jan. 2014
Bearbeitet: LIU am 22 Jan. 2014
Thank you,Bruno.I tried what you refer to, but failed to get the right format of tick labels as I want.Probably it's better for me to ask the question with pictures (see the comment above,please). Hope that helps me ask more clearly.
I did some research and tested myself and apparently, there is no way to control the value of the exponent that MATLAB automatically generates (at least in the current releases).
What you could do instead is label the ticks manually with get and set and play with the exponent:
x = 1:0.1:1000;
y = linspace(-0.005, 0.005, numel(x));
% Find a negative exponent
n = 0;
lpart = floor(max(y));
while lpart == 0
n = n+1;
lpart = floor(10^n * max(y));
end
n = -n;
figure;
plot(x,y)
y_tick = str2num(get(gca, 'YTickLabel'));
set(gca, 'YTickLabel', sprintf('%.e|', y_tick*10^n))
I haven't figured a way to format "0.5e-02" instead of "5.0e-03"... Sorry I can't help you more.
LIU
LIU am 22 Jan. 2014
Maybe I should ignore this problem for its hardness, and go ahead.Thank you for your quick response and warm-heartedness,anyway.

Melden Sie sich an, um zu kommentieren.

Walter Roberson
Walter Roberson am 20 Jan. 2014

0 Stimmen

Set yticklabel to the printable representation of the values you want; that will prevent the scale factor from being generated.

1 Kommentar

LIU
LIU am 22 Jan. 2014
Bearbeitet: LIU am 22 Jan. 2014
Thank you,Walter. But I didn't mean to prevent the scale factor. Maybe I should explain my question with pictures (see the comment above,please). Hope that helps me ask more clearly.

Melden Sie sich an, um zu kommentieren.

Juan Andrés Martin
Juan Andrés Martin am 5 Nov. 2020
Bearbeitet: Walter Roberson am 6 Nov. 2020

0 Stimmen

Refer to "Specify Axis Tick Values and Labels" in Matlab Documentation, specifically "Control Value in Exponent Label Using Ruler Objects" paragraph.
Moreover, using Bruno Pop-Stefanov's code as a basis:
x = 1:0.1:1000;
y = linspace(-0.005, 0.005, numel(x));
plot(x,y)
ax=gca;
ax.YAxis.Exponent=-2;
That should do the trick

1 Kommentar

Walter Roberson
Walter Roberson am 6 Nov. 2020
Note that this requires R2015b or newer.
If I recall correctly, there was also a way to do it in R2015a, but the axis property names were different -- YRuler instead of YAxis I think it was.

Melden Sie sich an, um zu kommentieren.

Gefragt:

LIU
am 20 Jan. 2014

Bearbeitet:

am 17 Mär. 2026 um 20:36

Community Treasure Hunt

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

Start Hunting!

Translated by