pythonmatplotlibgridlines

How to create major and minor gridlines with different linestyles


I am currently using matplotlib.pyplot to create graphs and would like to have the major gridlines solid and black and the minor ones either greyed or dashed.

In the grid properties, which=both/major/mine, and then color and linestyle are defined simply by linestyle. Is there a way to specify minor linestyle only?

The appropriate code I have so far is

plt.plot(current, counts, 'rd', markersize=8)
plt.yscale('log')
plt.grid(b=True, which='both', color='0.65', linestyle='-')

Solution

  • Actually, it is as simple as setting major and minor separately:

    In [9]: plot([23, 456, 676, 89, 906, 34, 2345])
    Out[9]: [<matplotlib.lines.Line2D at 0x6112f90>]
    
    In [10]: yscale('log')
    
    In [11]: grid(visible=True, which='major', color='b', linestyle='-')
    
    In [12]: grid(visible=True, which='minor', color='r', linestyle='--')
    

    The gotcha with minor grids is that you have to have minor tick marks turned on too. In the above code this is done by yscale('log'), but it can also be done with plt.minorticks_on().

    enter image description here

    Note: before matplotlib 3.5, visible parameter was named b