创建我使用的5个子图:
`ax = plt.subplots(5, sharex=True)`
然后,我想删除每个y轴子图的第一个和最后一个标签刻度(因为它们相互叠加),我用过:
`plt.setp([a.get_yticklabels()[0::-1] for a in ax[0:5]], visible=False)`
但这只是删除了一些滴答声,我不明白背后的逻辑。
答案 0 :(得分:11)
您应该小心第一次通话的结果。你可能想把它称为
fig, ax = plt.subplots(5, sharex=True, squeeze=True)
如果你这样做,你就可以遍历所有的轴:
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)
如果您想保留隐藏标签的风格,可以使用
for a in ax:
plt.setp(a.get_yticklabels()[0], visible=False)
plt.setp(a.get_yticklabels()[-1], visible=False)
答案 1 :(得分:5)
使用MaxNLocator:
from matplotlib.ticker import MaxNLocator
ax.yaxis.set_major_locator(MaxNLocator(prune='both'))
答案 2 :(得分:1)
这不会返回您的期望:
>>> some_list = [1, 2, 3, 4]
>>> some_list[0::-1]
[1] # and not [1, 4] !
使用切片表示法返回一个包含some_list
项的列表,从位置0开始的示例开始并逐渐减少。这在第一步后停止......
我认为你必须这两步,如@DavidZwicker所示。
答案 3 :(得分:0)