Matplotlib中如何让对数坐标轴的刻度线全部朝内显示?
问题复现
在matplotlib中尝试将坐标轴刻度设置为朝绘图区内侧时,编写如下代码:
plt.tick_params(axis='x', direction='in') plt.tick_params(axis="y", direction="in") plt.yscale("log")
实际效果为x轴刻度全部朝内,y轴仅主刻度朝内,对数次刻度仍然朝外,调整plt.yscale("log")和tick_params的执行顺序无法解决问题,效果如下:
故障原因
matplotlib的tick_params方法默认which参数值为'major',即配置仅对主刻度生效。对数y轴自动生成的次刻度不会继承主刻度的样式配置,因此始终保持默认朝外的显示状态,和代码执行顺序无关。
修复方法
在tick_params中添加which='both'参数,让配置同时作用于主刻度和次刻度即可,修正代码如下:
plt.tick_params(axis='x', direction='in', which='both') plt.yscale("log") plt.tick_params(axis="y", direction="in", which='both')
如果需要对主次刻度做差异化样式调整,可分别指定which参数单独配置,例如:
# 主刻度朝内,长度6像素 plt.tick_params(axis="y", which='major', direction='in', length=6) # 次刻度朝内,长度3像素 plt.tick_params(axis="y", which='minor', direction='in', length=3)
执行后y轴所有对数刻度都会统一朝绘图区域内侧显示。
内容的提问来源于stack exchange,提问作者Mohanachz
相关产品推荐
相关产品推荐

