Adding More, Less, or Removing Ticks

Using all defaults, matplotlib will plot a straight line from 0-10 on both axes and return a tick for every even number.

This notebook explores changing that.

%pylab inline

x = y = np.linspace(0, 10)
fig, ax = plt.subplots()
ax.plot(x, y)
Populating the interactive namespace from numpy and matplotlib





[<matplotlib.lines.Line2D at 0x5bae0f0>]

png

Adding Ticks

Most of the solutions you find when Googling “How to add more ticks?” will either do some messy list comprehension or something that looks like.

fig, ax = plt.subplots()
ax.plot(x, y)
_= ax.set_xticks(np.arange(0, x[-1]+1))

png

Instead, the matplotlib.ticks API has various TickLocator subclasses that make this much, much easier.

For instance, you can do a tick using every step along values in the y-axis, with the set_major_locator() function.

fig, ax = plt.subplots()
ax.plot(x, y)

loc = matplotlib.ticker.MultipleLocator(1)
ax.yaxis.set_major_locator(loc)

png

Or add minor ticks at twice the frequency with the corresponding set_minor_locator() function, and a different input to the MultipleLocator

fig, ax = plt.subplots()
ax.plot(x, y)

loc = matplotlib.ticker.MultipleLocator(.5)
ax.yaxis.set_minor_locator(loc)

png

Offset

Maybe you’re not interested in a graph that starts at 0. Using the ticker.IndexLocator class and modifying the base (better name would be step, IMO) and offset (how much you adjust each step by).

fig, ax = plt.subplots()
ax.plot(x, y)

loc = matplotlib.ticker.IndexLocator(base=1, offset=1)
ax.yaxis.set_major_locator(loc)
ax.xaxis.set_major_locator(loc)

png

Or if, for whatever reason, you wanted to align on fractional ticks, knock yourself out.

fig, ax = plt.subplots()
ax.plot(x, y)

loc = matplotlib.ticker.IndexLocator(base=1, offset=0.66)
ax.yaxis.set_major_locator(loc)

png

Removing Ticks Altogether

In another notebook, we mentioned how to hide ticks and labels by modifying their display properties. Here, we can use the NullLocator to never establish them in the first place.

fig, ax = plt.subplots()
ax.plot(x, y)

loc = matplotlib.ticker.NullLocator()
ax.yaxis.set_major_locator(loc)
ax.xaxis.set_major_locator(loc)

png