remove overlapping tick marks on subplot in matplotlib

后端 未结 1 844
感情败类
感情败类 2021-02-14 10:39

I\'ve create the following set of subplots using the following function:

def create31fig(size,xlabel,ylabel,title=None):
    fig = plt.figure(figsize=(size,size)         


        
1条回答
  •  名媛妹妹
    2021-02-14 11:22

    In the ticker module there is a class called MaxNLocator that can take a prune kwarg.
    Using that you can remove the topmost tick of the 2nd and 3rd subplots:

    import matplotlib.pyplot as plt
    from matplotlib.ticker import MaxNLocator # added 
    
    def create31fig(size,xlabel,ylabel,title=None):
        fig = plt.figure(figsize=(size,size))
        ax1 = fig.add_subplot(311)
        ax2 = fig.add_subplot(312)
        ax3 = fig.add_subplot(313)
        plt.subplots_adjust(hspace=0.001)
        plt.subplots_adjust(wspace=0.001)
        ax1.set_xticklabels([])
        ax2.set_xticklabels([])
        xticklabels = ax1.get_xticklabels() + ax2.get_xticklabels()
        plt.setp(xticklabels, visible=False)
        ax1.set_title(title)
        nbins = len(ax1.get_xticklabels()) # added 
        ax2.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper')) # added 
        ax2.set_ylabel(ylabel)
        ax3.yaxis.set_major_locator(MaxNLocator(nbins=nbins,prune='upper')) # added 
        ax3.set_xlabel(xlabel)
        return ax1,ax2,ax3
    
    create31fig(5,'xlabel','ylabel',title='test')
    

    Sample image after making those adjustments:

    enter image description here

    Aside: If the overlapping x- and y- labels in the lowest subplot are an issue consider "pruning" one of those as well.

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