Matplotlib imshow隐藏坐标轴刻度边框但保留轴标签的实现问题
解决方案:保留y轴标签的同时移除子图刻度与边框
问题原因
ax.axis('off')会一次性隐藏所有坐标轴相关元素,包括刻度、边框、轴标签,因此直接使用该方法会导致提前设置的y轴标签同步消失。
方案1:单独隐藏刻度与边框(推荐)
精准控制需要隐藏的元素,避免误删已设置的标签:
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=3, ncols=4, figsize=(16, 12)) for i in range(3): ax[i][0].set_ylabel(str(i)) for j in range(4): ax[0][j].set_title(str(j)) ax[i][j].imshow(np.random.normal(0, 1, (50, 50))) # 隐藏x、y轴的刻度及刻度标签 ax[i][j].set_xticks([]) ax[i][j].set_yticks([]) # 隐藏子图四周的黑色边框 for spine in ax[i][j].spines.values(): spine.set_visible(False) plt.show()
方案2:先关闭所有轴元素,再重新设置y轴标签
如果你习惯用axis('off')的简洁写法,可以在关闭轴之后,再给第一列子图单独设置y轴标签:
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=3, ncols=4, figsize=(16, 12)) for i in range(3): for j in range(4): ax[0][j].set_title(str(j)) ax[i][j].imshow(np.random.normal(0, 1, (50, 50))) ax[i][j].axis('off') # 关闭轴后再设置y轴标签,标签会正常显示 ax[i][0].set_ylabel(str(i)) plt.show()
两种方案最终效果完全一致:所有子图无刻度、无边框,同时保留第一列的y轴标签和第一行的子图标题。
内容的提问来源于stack exchange,提问作者Aleksejs Fomins
相关产品推荐
相关产品推荐

