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

Matplotlib log10刻度下动态显示更多主次坐标轴刻度标签

解决Matplotlib log10刻度下动态显示更多y轴刻度标签的问题

问题场景

使用给定的Pandas数据绘制log10刻度折线图时,y轴仅显示主刻度标签,无次要刻度;更换其他数据时则能正常显示更多主次刻度。需要实现无需硬编码数值,动态适配数据范围显示更多y轴刻度标签。

解决方案代码

import pandas as pd
from matplotlib import pyplot as plt
from matplotlib.ticker import LogLocator, ScalarFormatter

## 构造数据
temp_df = pd.DataFrame({'year': [2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012],
                        'numbers': [2684044.85, 4005117.02, 3046403.46, 6413495.07, 14885525.21, 5152235.33, 4040850.37,
                                    4616841.13, 4862062.25, 4702041.0, 5201620.42, 4405820.64, 1454650.88]})

## 绘制图表
fig, ax = plt.subplots(figsize=(14,7))
ax.plot('year', 'numbers', 'x-', data=temp_df)
ax.set_yscale('log', base=10)

# 配置主刻度:根据数据范围动态生成数量级刻度
ax.yaxis.set_major_locator(LogLocator(base=10.0, numticks=15))
# 配置次要刻度:每个数量级内显示2-9倍的中间刻度
ax.yaxis.set_minor_locator(LogLocator(base=10.0, subs='all', numticks=100))
# 设置次要刻度的标签格式,以常规数字显示
ax.yaxis.set_minor_formatter(ScalarFormatter())
# 调整刻度标签大小,避免重叠
ax.tick_params(axis='y', which='both', labelsize=10)

plt.show()

关键代码说明

  • LogLocator:用于对数轴的刻度定位,subs='all'会生成每个数量级内的所有中间次要刻度(如106到107之间的2e6、3e6…9e6);numticks设置足够大的值,确保Matplotlib不会因数据范围限制隐藏刻度。
  • ScalarFormatter:让次要刻度标签以常规数字格式显示,替代默认的隐藏状态,也可根据需求换成LogFormatterSciNotation使用科学计数法。
  • 整个配置完全动态,无需硬编码具体刻度值,会自动适配输入数据的数值范围生成合适的刻度。

内容的提问来源于stack exchange,提问作者Naveen Reddy Marthala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:30:09