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

如何让Matplotlib中X轴刻度标签显示在网格下方?

Matplotlib实现X轴刻度标签显示在网格下方的解决方案

问题描述

需要实现Matplotlib绘图中X轴刻度标签显示在网格下方的效果,先后尝试以下操作均未达到预期:

  • 执行ax.set_xticklabels([0.1, '', '', '', 0.5, '', '', '', '', 1.0], minor=True)
  • 将ax.set_xticks(np.arange(0, len(diameter_labels), 1))修改为ax.set_xticks(np.arange(0, len(diameter_labels), 1), minor=True)

修改后的完整代码

import matplotlib.pyplot as plt
import os
import numpy as np

if __name__ == "__main__":
    fig, ax = plt.subplots(figsize=(10, 3))
    diameter_labels = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

    row_labels = ['circle']
    
    # 先绘制网格,设置zorder确保网格在刻度标签上层
    ax.grid(which="major", color='black', linestyle='-', linewidth=1, zorder=0)
    ax.grid(which="major", color="white", linestyle='-', linewidth=3, zorder=1)

    ax.set_aspect(1.0)

    # 绘制圆形,zorder高于网格保证可见
    for row_index, row_label in enumerate(row_labels):
        for diameter_index, diameter_label in enumerate(diameter_labels):
            circle=plt.Circle((diameter_index + 0.5, row_index + 0.5), radius=(diameter_label/(2*1.09)), color='gray', fill=True, zorder=2)
            ax.add_artist(circle)

    ax.set_xlim([0, len(diameter_labels)])
    ax.set_ylim([0, len(row_labels)])

    # 设置X轴主刻度,隐藏刻度线与标签
    ax.set_xticks(np.arange(0, len(diameter_labels), 1))
    ax.tick_params(axis='x', which='major', bottom=False, top=False, labelbottom=False)
    
    # 绑定要显示的标签到次要刻度
    ax.set_xticks(np.arange(0, len(diameter_labels), 1), minor=True)
    ax.set_xticklabels([0.1, '', '', '', 0.5, '', '', '', '', 1.0], minor=True)
    # 调整次要标签位置与层级:pad增大距离实现视觉上的"下方",zorder=-1确保在网格下方
    ax.tick_params(axis='x', which='minor', length=0, labelsize=30, pad=20, zorder=-1)
    
    ax.xaxis.set_ticks_position('bottom')
    ax.xaxis.set_label_position('top')
    ax.set_xlabel('Test', fontsize=40, labelpad=5)

    # Y轴相关设置
    ax.set_yticklabels([])
    ax.set_yticks(np.arange(0, len(row_labels), 1))
    ax.tick_params(axis='y', which='major', left=False)
    ax.tick_params(axis='y', which='minor', length=0, labelsize=12)

    filename = 'test.png'
    figureFile = os.path.join('/Users/burcakotlu/Desktop', filename)
    fig.savefig(figureFile)
    plt.close()

关键改动说明

  • 控制元素层级(zorder):给网格、圆形、刻度标签设置不同的zorder值,标签zorder=-1,网格zorder=0/1,圆形zorder=2,确保标签显示在网格下方的层级。
  • 统一刻度绑定:将需要显示的标签完全绑定到次要刻度,避免主次要刻度的设置冲突。
  • 调整标签位置:通过tick_params的pad参数增加标签与X轴的距离,让标签在视觉上更靠下,远离网格区域。
  • 调整网格绘制顺序:先绘制黑色网格再绘制白色网格,保证网格的显示层级正确。

内容的提问来源于stack exchange,提问作者burcak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:54:51