如何在Matplotlib中设置双层X轴刻度并配置不同旋转角度
实现Matplotlib双层X轴标签的解决方案
嘿,我帮你搞定双层X轴标签的问题啦!你原来的代码里两次设置xticks会互相覆盖,所以没法同时显示两层标签。咱们可以通过创建共享X轴的副坐标轴来实现这个需求,具体修改后的代码如下:
import matplotlib.pyplot as plt import numpy as np from scipy.interpolate import make_interp_spline def jinDrawPragnogram2021013002(): x = list(range(1,11)) data_augment = [ 0, 0, 1, 5, 6, 7.5, 8, 10, 11, 10.5] data_upperlimit = [1.5, 2.5, 4.5, 7.5, 10, 11, 11.5, 12, 12.5, 13] data_mean = [2.1, 3.78, 6.3, 8.4, 9.24, 9.66, 10.08, 10.5, 10.92] x_label_1 = ['16+2', '18+4', '22+6', '28+6', '33+1', '35+1', '36+0', '37+2', '38+4', '39+1'] x_label_2 = ['2019/6/10', '2019/6/26', '2019/7/26', '2019/9/6', \ '2019/10/6', '2019/10/20', '2019/10/26', '2019/11/4', \ '2019/11/13', '2019/11/17'] fig, ax = plt.subplots() # 绘制曲线 ax.plot(x, data_augment) # 设置下层X轴(主坐标轴) ax.set_xticks(x) ax.set_xticklabels(x_label_2, rotation=70, ha='right') # ha='right'让旋转后的标签对齐更美观 # 创建上层X轴(副坐标轴,共享Y轴) ax_top = ax.twiny() ax_top.set_xticks(x) ax_top.set_xticklabels(x_label_1, rotation=0) # 不旋转 # 调整布局,避免标签被截断 plt.tight_layout() plt.show() return if __name__=='__main__': jinDrawPragnogram2021013002()
关键步骤说明:
- 改用
ax.set_xticks和ax.set_xticklabels的面向对象写法,比直接用plt.xticks更灵活可控,不会出现覆盖问题 - 通过
ax.twiny()创建一个共享Y轴的副坐标轴,这个轴就是我们需要的上层X轴 - 给上层轴设置和主轴完全相同的刻度位置
x,确保两层标签一一对应 - 给下层标签加上
ha='right'(水平对齐方式为右),旋转后标签不会歪歪扭扭,可读性更好 - 最后用
plt.tight_layout()自动调整图表布局,避免底部的日期标签被截断
内容的提问来源于stack exchange,提问作者Cat Liu
相关产品推荐
相关产品推荐

