Ask Your Question
1

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

asked 6 years ago

chrt gravatar image

updated 1 year ago

FrédéricC gravatar image

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

Preview: (hide)

4 Answers

Sort by » oldest newest most voted
1

answered 6 years ago

updated 6 years ago

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.

Preview: (hide)
link

Comments

1

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

John Palmieri gravatar imageJohn Palmieri ( 6 years ago )

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

chrt gravatar imagechrt ( 6 years ago )

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.

kcrisman gravatar imagekcrisman ( 6 years ago )

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

John Palmieri gravatar imageJohn Palmieri ( 6 years ago )
1

answered 6 years ago

Sébastien gravatar image

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

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

image description

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

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

image description

See documentation of plot? for more information.

Preview: (hide)
link

Comments

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)

chrt gravatar imagechrt ( 6 years ago )
0

answered 6 years ago

Emmanuel Charpentier gravatar image

Well...

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

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

Preview: (hide)
link
0

answered 6 years ago

chrt gravatar image

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'

Preview: (hide)
link

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 6 years ago

Seen: 1,176 times

Last updated: Feb 06 '19