how to turn on minor ticks only on y axis matplotlib

PythonMatplotlib

Python Problem Overview


How can I turn the minor ticks only on y axis on a linear vs linear plot?

When I use the function minor_ticks_on to turn minor ticks on, they appear on both x and y axis.

Python Solutions


Solution 1 - Python

Nevermind, I figured it out.

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

Solution 2 - Python

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.

Solution 3 - Python

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

Solution 4 - Python

To set minor ticks at custom locations:

ax.set_xticks([0, 10, 20, 30], minor=True)

Solution 5 - Python

Also, if you only want minor ticks on the actual y-axis, rather than on both the left and right-hand sides of the graph, you can follow the plt.axes().yaxis.set_minor_locator(ml) with plt.axes().yaxis.set_tick_params(which='minor', right = 'off'), like so:

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.axes().yaxis.set_tick_params(which='minor', right = 'off')
plt.show()

Solution 6 - Python

The following snippets should help:

from matplotlib.ticker import MultipleLocator
ax.xaxis.set_minor_locator(MultipleLocator(#))
ax.yaxis.set_minor_locator(MultipleLocator(#))

# refers to the desired interval between minor ticks.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionemadView Question on Stackoverflow
Solution 1 - PythonemadView Answer on Stackoverflow
Solution 2 - PythonJohn VinyardView Answer on Stackoverflow
Solution 3 - PythonspinupView Answer on Stackoverflow
Solution 4 - PythonEvgeni SergeevView Answer on Stackoverflow
Solution 5 - PythonmarisanoView Answer on Stackoverflow
Solution 6 - PythonVikram KumarView Answer on Stackoverflow