10

我使用以下函数创建了以下一组子图:

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)
    ax2.set_ylabel(ylabel)
    ax3.set_xlabel(xlabel)
    return ax1,ax2,ax3

如何确保 subplot(312) 的顶部和底部不与其邻居重叠?谢谢。

子情节

4

1 回答 1

18

在ticker 模块中有一个名为MaxNLocator的类,它可以采用修剪kwarg。
使用它,您可以删除第二个和第三个子图的最上面的刻度:

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')

进行这些调整后的示例图像:

在此处输入图像描述

旁白:如果最低子图中重叠的 x 和 y 标签是一个问题,请考虑“修剪”其中之一。

于 2013-04-02T20:09:17.063 回答