如何在matplotlib对数刻度上仅显示x轴相关十进制数值而非10的幂次
实现方案
要让对数刻度的x轴显示十进制数值而非10的幂次,你可以通过修改x轴的刻度格式化器实现,具体修改如下:
修改后的完整代码
import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.ticker import ScalarFormatter x = sorted([0.09, 20, 0.6, 6, 0.05, 0.5, 0.4, 4, 0.3, 3, 2, 0.1, 0.2, 0.9, 0.8, 10, 0.7, 1, 0.08, 0.07, 0.06, 0.04, 0.03, 0.02, 0.01, 0.005]) y = list(np.arange(0.0, 2.6, 0.1)) data = {'x': x, 'y': y} df = pd.DataFrame(data) df.plot(x='x') plt.ylim(0, max(y)+0.5) plt.xscale('log', base=10) # 新增刻度格式化配置 ax = plt.gca() # 设置主刻度为普通十进制格式 ax.xaxis.set_major_formatter(ScalarFormatter()) # 可选:如果需要小刻度也显示十进制数值,取消注释下一行 # ax.xaxis.set_minor_formatter(ScalarFormatter()) # 强制关闭科学计数法和偏移显示 ax.ticklabel_format(axis='x', style='plain', useOffset=False) plt.grid() plt.show()
关键配置说明
- 导入的
ScalarFormatter是matplotlib内置的普通数值格式化工具,会把刻度值转换为常规十进制数字展示,不会自动转成10的幂次格式 ticklabel_format的style='plain'参数强制禁用科学计数法,useOffset=False关闭刻度值偏移显示,避免出现类似+1e-2的额外标注- 如果不需要显示过小的次刻度数值,删除次刻度格式化的代码即可
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

