如何删除matplotlib中只有一个刻度的轴标签

时间:2016-02-26 23:44:06

标签: python matplotlib

我正在使用matplotlib绘制几个相邻的面板。我有一个问题,一些轴标签与面板相遇的地方重叠。最小的工作示例和示例图像如下。

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4,8))
ax1 = fig.add_axes([.25,.5,.5,.25])
ax2 = fig.add_axes([.25,.25,.5,.25])

ax1.set_xticklabels([])

fig.savefig("temp.pdf")

enter image description here

正如您在图像中看到的那样,顶部面板的0.0和底部面板的1.0位于同一位置。我试图让底部面板的1.0不显示但仍然显示轴上的剩余标签。我尝试过的任何东西都没有效果。我尝试过的事情:

#This just doesn't do anything
from matplotlib.ticker import MaxNLocator
ax3.xaxis.set_major_locator(MaxNLocator(prune='upper'))

#This produces the image shown below
labels = [item for item in ax2.get_yticklabels()]
labels[-1].text = ''
ax2.set_yticklabels(labels) 

#This also produces the image shown below
labels = ax2.get_yticklabels()
labels[-1].set_text('')
ax2.set_yticklabels(labels) 

enter image description here

上面的图像是由紧接图像之前的三个代码块中的最后两个产生的。无论是否包含行labels[-1].text = '',都会出现奇怪的y轴标签。

2 个答案:

答案 0 :(得分:3)

您需要获取轴的所有yticklabel,然后使用除最后一个之外的所有轴来设置它们。这里的一个重点(特别是matplotlib的新版本)是你必须在获取ytick标签之前显示图形并刷新画布,以便已经计算出它们的默认位置。

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4,8))
ax1 = fig.add_axes([.25,.5,.5,.25])
ax2 = fig.add_axes([.25,.25,.5,.25])

ax1.set_xticklabels([])

# Important to render initial ytick labels
fig.show()
fig.canvas.draw()

# Remove the last ytick label
labels = [tick.get_text() for tick in ax2.get_yticklabels()]
ax2.set_yticklabels(labels[:-1])

# Refresh the canvas to reflect the change
fig.canvas.draw()
  

注意:在我之前的代码中,我在更改刻度以调试内容之前使用了fig.savefig()调用,这迫使渲染和生成默认的ytick标签。

enter image description here

答案 1 :(得分:-1)

添加此行:plt.setp(ax2.get_yticklabels()[-1],visible = False)

这将使2轴垂直轴上最上面的刻度标签不可见