如何让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
相关产品推荐
相关产品推荐

