我正在使用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")
正如您在图像中看到的那样,顶部面板的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)
上面的图像是由紧接图像之前的三个代码块中的最后两个产生的。无论是否包含行labels[-1].text = ''
,都会出现奇怪的y轴标签。
答案 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标签。
答案 1 :(得分:-1)
添加此行:plt.setp(ax2.get_yticklabels()[-1],visible = False)
这将使2轴垂直轴上最上面的刻度标签不可见