删除每个y轴子项的第一个和最后一个记号标签

2024-09-27 09:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

要创建我使用的5个子块:

`ax = plt.subplots(5, sharex=True)`

然后,我要删除每个y轴子批次的第一个和最后一个标签勾号(因为它们相互重叠),我使用:

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

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


Tags: intrueforgetplt标签ax勾号
3条回答

你应该小心第一次通话的结果。你可以这样称呼它

fig, ax = plt.subplots(5, sharex=True, squeeze=True)

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

for a in ax:
    # get all the labels of this axis
    labels = a.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)

注意:在访问刻度标签之前,您可能需要调用draw()(请参见:https://stackoverflow.com/a/41131528/8144672)。例如,当打印到PDF时,必须在get_xticklabels()之前调用plt.gcf().canvas.draw()

这并不能满足您的期望:

>>> some_list = [1, 2, 3, 4]
>>> some_list[0::-1]
[1]  # and not [1, 4] !

使用切片表示法返回一个列表,其中包含some_list个项,从0位置开始的示例中开始,然后递减。这在第一步之后就停止了。。。

我认为你必须分两步来完成,如@DavidZwicker所示。

使用MaxNLocator

from matplotlib.ticker import MaxNLocator
ax.yaxis.set_major_locator(MaxNLocator(prune='both'))

相关问题 更多 >

    热门问题