How to prevent numbers being changed to exponential form in a plot
Question:
I’m using Matplotlib in Python to plot simple x-y datasets. This produces nice-looking graphs, although when I “zoom in” too close on various sections of the plotted graph using the Figure View (which appears when you execute plt.show()
), the x-axis values change from standard number form (1050, 1060, 1070 etc.) to scientific form with exponential notation (e.g. 1, 1.5, 2.0 with the x-axis label given as +1.057e3
).
I’d prefer my figures to retain the simple numbering of the axis, rather than using exponential form. Is there a way I can force Matplotlib to do this?
Answers:
The formatting of tick labels is controlled by a Formatter
object, which assuming you haven’t done anything fancy will be a ScalerFormatter
by default. This formatter will use a constant shift if the fractional change of the values visible is very small. To avoid this, simply turn it off:
plt.plot(arange(0,100,10) + 1000, arange(0,100,10))
ax = plt.gca()
ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.draw()
If you want to avoid scientific notation in general,
ax.get_xaxis().get_major_formatter().set_scientific(False)
Can control this with globally via the axes.formatter.useoffset
rcparam.
You can use something like:
from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
You can use a simpler command to turn it off:
plt.ticklabel_format(useOffset=False)
Use the following command:
ax.ticklabel_format(useOffset=False, style='plain')
If you are using a subplot, you may experience the AttributeError: This method only works with the ScalarFormatter
in which case you would add axis='y'
like the below. You can change ‘y’ to the axis with the issues.
ax1.ticklabel_format(useOffset=False, style='plain', axis='y')
Source question and answer here. Note, the axis 'y'
command use is hidden in the answer comments.
I have used below code before the graphs, and it worked seamless for me..
plt.ticklabel_format(style='plain')
Exactly I didn’t want scientific numbers to be shown when I zoom in, and the following worked in my case too. I am using Lat/Lon in labeling where scientific form doesn’t make sense.
plt.ticklabel_format(useOffset=False)
I’m using Matplotlib in Python to plot simple x-y datasets. This produces nice-looking graphs, although when I “zoom in” too close on various sections of the plotted graph using the Figure View (which appears when you execute plt.show()
), the x-axis values change from standard number form (1050, 1060, 1070 etc.) to scientific form with exponential notation (e.g. 1, 1.5, 2.0 with the x-axis label given as +1.057e3
).
I’d prefer my figures to retain the simple numbering of the axis, rather than using exponential form. Is there a way I can force Matplotlib to do this?
The formatting of tick labels is controlled by a Formatter
object, which assuming you haven’t done anything fancy will be a ScalerFormatter
by default. This formatter will use a constant shift if the fractional change of the values visible is very small. To avoid this, simply turn it off:
plt.plot(arange(0,100,10) + 1000, arange(0,100,10))
ax = plt.gca()
ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.draw()
If you want to avoid scientific notation in general,
ax.get_xaxis().get_major_formatter().set_scientific(False)
Can control this with globally via the axes.formatter.useoffset
rcparam.
You can use something like:
from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
You can use a simpler command to turn it off:
plt.ticklabel_format(useOffset=False)
Use the following command:
ax.ticklabel_format(useOffset=False, style='plain')
If you are using a subplot, you may experience the AttributeError: This method only works with the ScalarFormatter
in which case you would add axis='y'
like the below. You can change ‘y’ to the axis with the issues.
ax1.ticklabel_format(useOffset=False, style='plain', axis='y')
Source question and answer here. Note, the axis 'y'
command use is hidden in the answer comments.
I have used below code before the graphs, and it worked seamless for me..
plt.ticklabel_format(style='plain')
Exactly I didn’t want scientific numbers to be shown when I zoom in, and the following worked in my case too. I am using Lat/Lon in labeling where scientific form doesn’t make sense.
plt.ticklabel_format(useOffset=False)