删除每个y轴子图的第一个和最后一个刻度标签

Py-*_*ser 5 python matplotlib

为了创建我使用的5个子图:

`ax = plt.subplots(5, sharex=True)`
Run Code Online (Sandbox Code Playgroud)

然后,我想删除每个y轴子图的第一个和最后一个标签刻度(因为它们相互叠加),我用过:

`plt.setp([a.get_yticklabels()[0::-1] for a in ax[0:5]], visible=False)`
Run Code Online (Sandbox Code Playgroud)

但这只是删除了一些滴答声,我不明白背后的逻辑.

Dav*_*ker 12

你应该小心第一次通话的结果.你可能想称之为

fig, ax = plt.subplots(5, sharex=True, squeeze=True)
Run Code Online (Sandbox Code Playgroud)

如果你这样做,你可以只遍历所有轴:

for a in ax:
    # get all the labels of this axis
    labels = ax.get_yticklabels()
    # remove the first and the last labels
    labels[0] = labels[-1] = ""
    # set these new labels
    a.set_yticklabels(labels)
Run Code Online (Sandbox Code Playgroud)

如果你想保持隐藏标签的风格,你可以使用

for a in ax:
    plt.setp(a.get_yticklabels()[0], visible=False)    
    plt.setp(a.get_yticklabels()[-1], visible=False)
Run Code Online (Sandbox Code Playgroud)


Rug*_*rra 6

使用MaxNLocator

from matplotlib.ticker import MaxNLocator
ax.yaxis.set_major_locator(MaxNLocator(prune='both'))
Run Code Online (Sandbox Code Playgroud)