我正在尝试创建一个绘图函数,将所需绘图的数量作为输入并使用pylab.subplotssharex=True选项进行绘图。如果所需图的数量为奇数,那么我想删除最后一个面板,并在其上方的面板上强行打勾标签。我找不到同时使用sharex=True选项的方法。子图的数量可能很大(> 20)。

这是示例代码。在此示例中,我想在i=3时强制使用xtick标签。

import numpy as np
import matplotlib.pylab as plt

def main():
    n = 5
    nx = 100
    x = np.arange(nx)
    if n % 2 == 0:
        f, axs = plt.subplots(n/2, 2, sharex=True)
    else:
        f, axs = plt.subplots(n/2+1, 2, sharex=True)
    for i in range(n):
        y = np.random.rand(nx)
        if i % 2 == 0:
            axs[i/2, 0].plot(x, y, '-', label='plot '+str(i+1))
            axs[i/2, 0].legend()
        else:
            axs[i/2, 1].plot(x, y, '-', label='plot '+str(i+1))
            axs[i/2, 1].legend()
    if n % 2 != 0:
        f.delaxes(axs[i/2, 1])
    f.show()


if __name__ == "__main__":
     main()

最佳答案

如果用以下命令替换if函数中的最后一个main

if n % 2 != 0:
    for l in axs[i/2-1,1].get_xaxis().get_majorticklabels():
        l.set_visible(True)
    f.delaxes(axs[i/2, 1])

f.show()


它应该可以解决问题:

10-08 19:36