You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,提问作者Тимур Шанкулов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:03:31