我正在用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轴标签。
您将要获取轴的所有ytick标签,然后使用除最后一个以外的所有ytick标签进行设置。这里的重要一点(尤其是使用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标签。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句