Changing the "tick frequency" on x or y axis in matplotlib?
You could explicitly set where you want to tick marks with plt.xticks
:
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
For example,
import numpy as npimport matplotlib.pyplot as pltx = [0,5,9,10,15]y = [0,1,2,3,4]plt.plot(x,y)plt.xticks(np.arange(min(x), max(x)+1, 1.0))plt.show()
(np.arange
was used rather than Python's range
function just in case min(x)
and max(x)
are floats instead of ints.)
The plt.plot
(or ax.plot
) function will automatically set default x
and y
limits. If you wish to keep those limits, and just change the stepsize of the tick marks, then you could use ax.get_xlim()
to discover what limits Matplotlib has already set.
start, end = ax.get_xlim()ax.xaxis.set_ticks(np.arange(start, end, stepsize))
The default tick formatter should do a decent job rounding the tick values to a sensible number of significant digits. However, if you wish to have more control over the format, you can define your own formatter. For example,
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
Here's a runnable example:
import numpy as npimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerx = [0,5,9,10,15]y = [0,1,2,3,4]fig, ax = plt.subplots()ax.plot(x,y)start, end = ax.get_xlim()ax.xaxis.set_ticks(np.arange(start, end, 0.712123))ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))plt.show()
Another approach is to set the axis locator:
import matplotlib.ticker as pltickerloc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervalsax.xaxis.set_major_locator(loc)
There are several different types of locator depending upon your needs.
Here is a full example:
import matplotlib.pyplot as pltimport matplotlib.ticker as pltickerx = [0,5,9,10,15]y = [0,1,2,3,4]fig, ax = plt.subplots()ax.plot(x,y)loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervalsax.xaxis.set_major_locator(loc)plt.show()
I like this solution (from the Matplotlib Plotting Cookbook):
import matplotlib.pyplot as pltimport matplotlib.ticker as tickerx = [0,5,9,10,15]y = [0,1,2,3,4]tick_spacing = 1fig, ax = plt.subplots(1,1)ax.plot(x,y)ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))plt.show()
This solution give you explicit control of the tick spacing via the number given to ticker.MultipleLocater()
, allows automatic limit determination, and is easy to read later.