如何在Matplotlib中移除多张图片子图的刻度(ticks)?
如何移除Matplotlib多张子图的刻度(ticks)
你当前代码里的plt.axis("off")存在问题:它只会对当前活跃的子图生效,而非遍历到的每个子图,所以无法批量关闭所有子图的刻度。下面是几种可行的解决方法:
方法一:针对每个子图对象调用axis('off')
直接在循环中对当前子图对象执行关闭轴的操作,确保每个子图的刻度和轴框都被隐藏:
def plot_random_grid(img,num_rows=2,num_cols=2,width=None, height=None): fig, axs = plt.subplots(num_rows, num_cols) seed=1 for i in range(num_rows): for j in range(num_cols): axs[i][j].imshow( random_crop(img,width=width,height=height,seed=seed)) axs[i][j].set_title("Seed: %s (100x100)" % (seed)) seed += 1 # 替换plt.axis("off")为当前子图对象的axis方法 axs[i][j].axis('off') plot_random_grid(img_cv,num_rows=2,num_cols=3,width=100,height=100)
方法二:仅隐藏刻度(保留轴框)
如果不需要隐藏整个轴框,只想移除刻度,可以单独设置x轴和y轴的刻度为空列表:
# 在循环中替换axis('off')为以下两行 axs[i][j].set_xticks([]) axs[i][j].set_yticks([])
方法三:扁平化子图数组,简化循环
当子图数量较多时,将二维的axs数组扁平化,能让循环逻辑更简洁:
def plot_random_grid(img,num_rows=2,num_cols=2,width=None, height=None): fig, axs = plt.subplots(num_rows, num_cols) seed=1 # 将二维数组转为一维,统一遍历所有子图 for ax in axs.flatten(): ax.imshow( random_crop(img,width=width,height=height,seed=seed)) ax.set_title("Seed: %s (100x100)" % (seed)) ax.axis('off') seed += 1 plot_random_grid(img_cv,num_rows=2,num_cols=3,width=100,height=100)
修改后所有子图的刻度都会被移除,原效果(带刻度)如下:
内容的提问来源于stack exchange,提问作者Тимур Шанкулов
相关产品推荐
相关产品推荐

