Python 删除每个y轴子批次的第一个和最后一个标记标签

Python 删除每个y轴子批次的第一个和最后一个标记标签,python,matplotlib,Python,Matplotlib,要创建5个子地块,我使用了: `ax = plt.subplots(5, sharex=True)` 然后,我想删除每个y轴子批次的第一个和最后一个标签勾号(因为它们相互重叠),我使用: 但这只是去除了一些滴答声,我不理解背后的逻辑。您应该小心第一次调用的结果。你可以这样称呼它 fig, ax = plt.subplots(5, sharex=True, squeeze=True) 如果执行此操作,则可以遍历所有轴: for a in ax: # get all the labels

要创建5个子地块,我使用了:

`ax = plt.subplots(5, sharex=True)`
然后,我想删除每个y轴子批次的第一个和最后一个标签勾号(因为它们相互重叠),我使用:


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

您应该小心第一次调用的结果。你可以这样称呼它

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()
(请参阅:)。例如,打印到PDF时,必须在
get\xticklabels()
之前调用
plt.gcf().canvas.draw()
,这不会返回您期望的结果:

>>> some_list = [1, 2, 3, 4]
>>> some_list[0::-1]
[1]  # and not [1, 4] !
使用切片表示法返回一个列表,其中包含一些\u列表项,从示例中的位置0开始,并进行递减。这将在第一步之后停止

我认为您必须通过两个步骤来完成此操作,如@DavidZwicker所示。

使用:


另一个选项是使用
x_ticks[0].label1.set_visible
,如下所示

导入matplotlib
matplotlib.use('Agg')
进口派拉布
从matplotlib导入rc
rc('font',**{'family':'sans serif','sans serif':['Times-Roman']})
rc('text',usetex=True)
matplotlib.rcParams['text.latex.preamble']=[r”\usepackage{amsmath}]
图,axs=matplotlib.pyplot.subplot(5,sharex=True,squence=True)
x_ticks=axs[4].xaxis.get_major_ticks()
x_记号[0]。标签1。设置_可见(假)35;#设置第一个x记号标签不可见
x_刻度[-1].label1.set_visible(False)35;#set last x刻度标签不可见
pylab.tight_布局()
pylab.savefig('./test.png',dpi=200)
你会得到


不完全一样吗?但是请记住,“a”是一个numpy.ndarray,因此它不支持这些选项…感谢Py-ser注意到
plt.subplot
的结果是一个元组,通常是一个2d数组。我在答复中加了一条说明。我的代码仍然与上面的代码不同,因为使用
[0::-1]
与使用
[0]
是一样的。因此,您只能选择第一个标签。
labels=ax.get_-yticklabels()
只能在循环之外,还是
ax
是一个打字错误,它应该是
a
?或者是
ax.get_yticklabels()
在循环
ax
时发生了变化?
>>> some_list = [1, 2, 3, 4]
>>> some_list[0::-1]
[1]  # and not [1, 4] !
from matplotlib.ticker import MaxNLocator
ax.yaxis.set_major_locator(MaxNLocator(prune='both'))