Change grid interval and specify tick labels in Matplotlib

前端 未结 2 1519
花落未央
花落未央 2020-12-02 04:22

I am trying to plot counts in gridded plots, but I am not being able to figure out how I go about it. I want to:

  1. Have dotted grids at an interval of 5

相关标签:
2条回答
  • 2020-12-02 04:41

    A subtle alternative to MaxNoe's answer where you aren't explicitly setting the ticks but instead setting the cadence.

    import matplotlib.pyplot as plt
    from matplotlib.ticker import (AutoMinorLocator, MultipleLocator)
    
    fig, ax = plt.subplots(figsize=(10, 8))
    
    # Set axis ranges; by default this will put major ticks every 25.
    ax.set_xlim(0, 200)
    ax.set_ylim(0, 200)
    
    # Change major ticks to show every 20.
    ax.xaxis.set_major_locator(MultipleLocator(20))
    ax.yaxis.set_major_locator(MultipleLocator(20))
    
    # Change minor ticks to show every 5. (20/4 = 5)
    ax.xaxis.set_minor_locator(AutoMinorLocator(4))
    ax.yaxis.set_minor_locator(AutoMinorLocator(4))
    
    # Turn grid on for both major and minor ticks and style minor slightly
    # differently.
    ax.grid(which='major', color='#CCCCCC', linestyle='--')
    ax.grid(which='minor', color='#CCCCCC', linestyle=':')
    

    0 讨论(0)
  • 2020-12-02 04:45

    There are several problems in your code.

    First the big ones:

    1. You are creating a new figure and a new axes in every iteration of your loop → put fig = plt.figure and ax = fig.add_subplot(1,1,1) outside of the loop.

    2. Don't use the Locators. Call the functions ax.set_xticks() and ax.grid() with the correct keywords.

    3. With plt.axes() you are creating a new axes again. Use ax.set_aspect('equal').

    The minor things: You should not mix the MATLAB-like syntax like plt.axis() with the objective syntax. Use ax.set_xlim(a,b) and ax.set_ylim(a,b)

    This should be a working minimal example:

    import numpy as np
    import matplotlib.pyplot as plt
    
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    
    # Major ticks every 20, minor ticks every 5
    major_ticks = np.arange(0, 101, 20)
    minor_ticks = np.arange(0, 101, 5)
    
    ax.set_xticks(major_ticks)
    ax.set_xticks(minor_ticks, minor=True)
    ax.set_yticks(major_ticks)
    ax.set_yticks(minor_ticks, minor=True)
    
    # And a corresponding grid
    ax.grid(which='both')
    
    # Or if you want different settings for the grids:
    ax.grid(which='minor', alpha=0.2)
    ax.grid(which='major', alpha=0.5)
    
    plt.show()
    

    Output is this:

    0 讨论(0)
提交回复
热议问题