Matplotlib技术问询:能否将x轴刻度标签绘于轴上方?如何标记特定x轴位置
嘿,我来帮你搞定这两个Matplotlib的小问题!
问题1:把x轴刻度标签移到x轴上方
这个操作很简单,用tick_params()就能轻松调整刻度和标签的位置:
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(1,1) ax.scatter([-1,1],[1,1]) # 把x轴的刻度和标签都移到上方,同时隐藏下方的刻度和标签 ax.tick_params(axis='x', top=True, # 显示上方的刻度线 labeltop=True, # 显示上方的刻度标签 bottom=False, # 隐藏下方的刻度线 labelbottom=False) # 隐藏下方的刻度标签 plt.setp(ax.spines.values(), linewidth=3) plt.show()
这样就能让所有x轴刻度标签乖乖待在轴的上方啦~
问题2:在x轴特定位置添加轴上方的彩色星号标记
你之前用次要刻度的方式确实容易被轴的粗线条遮挡,其实不用这么绕,直接用ax.text()或者ax.scatter()就能在任意位置精准放置标记,还能确保它在轴上方:
方法1:用ax.text()(推荐,更灵活控制样式)
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(1,1) ax.scatter([-1,1],[1,1]) # 在x=0的位置,轴上方添加红色星号 # 这里用了x轴的变换(transform=ax.get_xaxis_transform()),y坐标是相对轴的比例: # y=1是轴的顶部,y=1.05就是顶部往上5%的位置,完全不会被轴遮挡 ax.text(0, 1.05, '*', color='r', fontsize=20, ha='center', va='bottom', # 水平居中,底部对齐,确保星号在目标x正上方 transform=ax.get_xaxis_transform()) plt.setp(ax.spines.values(), linewidth=3) plt.show()
方法2:用ax.scatter()(适合需要标记点样式的场景)
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(1,1) ax.scatter([-1,1],[1,1]) # 同样用轴变换来固定位置在轴上方 ax.scatter(0, 1.05, marker='*', color='r', s=500, # s控制标记大小 transform=ax.get_xaxis_transform()) plt.setp(ax.spines.values(), linewidth=3) plt.show()
这种方式的好处是,不管你怎么调整y轴的范围,星号都会稳稳地待在x轴上方,完全不会被遮挡~
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

