# How can I avoit the scientific notation on the y-axis?

Example: plot(exp(0.017*x), (x,0,2000))

edit retag close merge delete

Sort by » oldest newest most voted

You can use the matplotlib function FormatStrFormatter. This uses old-style Python formatting. The first argument is for the x-axis, the second for the y-axis. Using None gives the default setting.

sage: P = plot(exp(0.017*x), (x,0,2000))
sage: from matplotlib.ticker import FormatStrFormatter
sage: P.SHOW_OPTIONS['tick_formatter']=(None, FormatStrFormatter('%d'))
sage: P


I think it looks pretty horrible this way, and I would stick with scientific notation, as Emmanuel Charpentier said.

more

1

Or you can use matplotlib.ticker.StrMethodFormatter and new-style formatting: P.SHOW_OPTIONS['tick_formatter']=(None, StrMethodFormatter('{x:.2f}')).

( 2019-02-05 23:13:12 -0600 )edit

Thank you John, that helped. I am just at the very beginning learning Sage/Phyton, so it will take some time to find a 'good' formatting. The Idea is to show the growth of the worlds population in a readable plot

( 2019-02-06 03:40:49 -0600 )edit

That said, the scientific notation often is not really readable. Just get "e19 e19 e19 e19" or something. I wanted to try to fix this in a clunky way years ago but never quite got around to it; still unfortunate.

( 2019-02-08 21:57:35 -0600 )edit

For this particular graph, the axis has labels '1e14', '2e14', '3e14', etc.

( 2019-02-12 09:40:11 -0600 )edit

An alternative is to use the log scale on the y-axis:

sage: plot(exp(0.017*x), (x,0,2000), scale="semilogy")


Note that you may change the base of the logarithm this way:

sage: plot(exp(0.017*x), (x,0,2000), scale=("semilogy",3))


See documentation of plot? for more information.

more

I want to show the dramatic of the growth of population. With the log-scaling, this is not visible for most eyes. So I found

sage: P = plot(exp(0.0178x)1.9833/10^15, (x,0,2100)) ....: from matplotlib.ticker import FormatStrFormatter ....: P.SHOW_OPTIONS['tick_formatter']=(None, FormatStrFormatter('%d' " Mrd.")) ....: P,

which does a good 'job'. (Sorry, I don't know how to set a graphik into a comment)

( 2019-02-08 01:53:33 -0600 )edit

Thanks for the response. Unfortunately, within the plotcommand, plot(exp(0.017*x),(x,0,2000)).n() I get the following message AttributeError: 'Graphics' object has no attribute 'n'

more

Well...

sage: e^(2000*0.017).n()
5.83461742527455e14


Do yoy really need 14-digits wide y-axis markers ?

more