Force scientific notation in axes

90 visualizzazioni (ultimi 30 giorni)
pfb
pfb il 15 Ott 2014
Commentato: Thomas Gillis il 5 Feb 2019
Sometimes, when the "raw" values in the yticks are very small, matlab y axis automatically toggles to scientific notation, whereby the power of ten giving the order of magnitude appears in the top left corner, and the yticks are given in units of that power. The threshold for this behavior seems to be 1e-3, but I can't seem to find a property for forcing it on larger yticks.
I have found a few questions roughly on the same topic, but none of the relevant answers seem to apply to my case. Some people simply wanted to get rid of the scientific notation, other wanted it directly in the tick labels.
I like the "order of magnitude" format, but I am unable to force it (for instance, I'd like to have it for yticks of the order of 1e-2, for graphical homogeneity with a different plot).
Before downloading or creating an "ad hoc" code, I wanted to ask whether any of you knows a (perhaps undocumented?) way of toggling the "order of magnitude" notation.
Thanks a lot
Francesco
  4 Commenti
Dinant Kistemaker
Dinant Kistemaker il 24 Set 2015
one more very small change of:
text(xl(1),yl(2),sprintf('\\times10^%d',e),...
into:
text(xl(1),yl(2),sprintf('\\times10^{%d}',e),...
to correctly show the superscript
Thomas Gillis
Thomas Gillis il 5 Feb 2019
The answer of phb worked for me, except that there is a small problem in the exponent computation.
It should be
e = floor(log10(abs(yl(2))));
instead of
e=log10(yl(2));
e=sign(e)*floor(abs(e));

Accedi per commentare.

Risposte (3)

Steven Lord
Steven Lord il 24 Set 2015
Take a look at the new axis customization functionality introduced in release R2015b and described in this post on Loren's blog. You may find some of the techniques described in that post useful.

David Sanchez
David Sanchez il 15 Ott 2014
  1 Commento
pfb
pfb il 15 Ott 2014
Hi David,
thanks a lot for your prompt reply. I missed the stack overflow very neatly posed question, but stumbled upon the one in matlab answers it points to. Ccook's "no-go" reply was conditioned to setting YTickLabel ("If you set YTickLabel, then there is no (documented) way to get MATLAB to automatically put in the exponent the same way.") I think that's pretty obvious... How can matlab know about the order of magnitude if you set the tick labels, which are strings? Perhaps he meant "YTick". By the way that's what prompted me to ask about "possibly undocumented" ways to do that.
It's a bit frustrating that there is no toggle for this behavior. After all, somewhere in the code for the figure there must be some check on the order of magnitude for the plot range. It seems to me that changing the default threshold for that check would do the trick.
I am not even able to get a handle for the text giving the order of magnitude, so it must be something in the axes structure (as opposed to a simple bit of text).
A couple of comments
1) my statement of the problem is not very precise. Of course the order of magnitude behavior does not apply only to "very small" plot ranges, but also to "very large" ones. It seems to me that the lower and upper bounds are 1e-3 and 1e+4.
2) I have checked that changing the ylim (which sets YLimMode to "manual") does not remove the scientific notation, provided that the new range is compatible with the above thresholds.

Accedi per commentare.


Iain
Iain il 15 Ott 2014
Modificato: Iain il 15 Ott 2014
Here's a really simple option.
Change the units of the axes. Plot time, in, for example, hs, cs, ds, Ds, ms, ks ...
  3 Commenti
Iain
Iain il 15 Ott 2014
You do realise that people will ask "So what are the units?" if you don't put them on the labels...
pfb
pfb il 18 Apr 2015
Hi lain,
I noticed your comment just now. Sorry for the late reply. I'm replying anyway because your comment seems unnecessarily contentious.
Have you read my comment? Let me quote myself
"Your method requires specifying the units... This can be done in the figure caption or perhaps in the axes labels"
If someone asked "So what are the units?" I could reply "Pay attention! Look at the axes label and the figure caption"

Accedi per commentare.

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by