how to turn on minor ticks only on y axis matplotlib

前端 未结 5 1822
故里飘歌
故里飘歌 2020-12-07 17:08

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

相关标签:
5条回答
  • 2020-12-07 17:50

    To set minor ticks at custom locations:

    ax.set_xticks([0, 10, 20, 30], minor=True)
    
    0 讨论(0)
  • 2020-12-07 18:00

    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.

    0 讨论(0)
  • 2020-12-07 18:01

    Nevermind, I figured it out.

    ax.tick_params(axis='x', which='minor', bottom=False)
    
    0 讨论(0)
  • 2020-12-07 18:06

    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.

    0 讨论(0)
  • 2020-12-07 18:12

    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()
    
    0 讨论(0)
提交回复
热议问题