how to turn on minor ticks only on y axis matplotlib

Here's another way I found in the matplotlib documentation:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.ticker import MultipleLocator

a = np.arange(100)
ml = MultipleLocator(5)
plt.plot(a)
plt.axes().yaxis.set_minor_locator(ml)
plt.show()

This will place minor ticks on only the y-axis, since minor ticks are off by default.


To clarify the procedure of @emad's answer, the steps to show minor ticks at default locations are:

  1. Turn on minor ticks for an axes object, so locations are initialized as Matplotlib sees fit.
  2. Turn off minor ticks that are not desired.

A minimal example:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
plt.plot([1,2])

# Currently, there are no minor ticks,
#   so trying to make them visible would have no effect
ax.yaxis.get_ticklocs(minor=True)     # []

# Initialize minor ticks
ax.minorticks_on()

# Now minor ticks exist and are turned on for both axes

# Turn off x-axis minor ticks
ax.xaxis.set_tick_params(which='minor', bottom=False)

Alternative Method

Alternatively, we can get minor ticks at default locations using AutoMinorLocator:

import matplotlib.pyplot as plt
import matplotlib.ticker as tck

fig, ax = plt.subplots()
plt.plot([1,2])

ax.yaxis.set_minor_locator(tck.AutoMinorLocator())

Result

Either way, the resulting plot has minor ticks on the y-axis only.

plot with minor ticks on y-axis only


Nevermind, I figured it out.

ax.tick_params(axis='x', which='minor', bottom=False)