科学刻度标签标记调整

1 投票
2 回答
2124 浏览
提问于 2025-04-18 08:05

我对默认的科学格式化的刻度标签不太满意。例如,

import numpy as np
import pylab

pylab.rcParams['text.usetex'] = True
pylab.ticklabel_format(style='sci')

pylab.figure(1)
pylab.clf()
pylab.scatter(range(10),np.linspace(-21.305,-21.300,10))
pylab.show()

生成的图像中,刻度标签的形式是

在这里输入图片描述

这里的问题是,首先我认为 -2.1298x10^1 应该显示为 -21.298,而且我一般只想看到那些指数是3的倍数的形式(比如 10^310^6 等等,对于 10^0 我希望能隐藏它,直接显示为 -21.298)。

另外,我希望看到的不是 0.000-0.002 这样的数字,而是 0-2,这样 10^-3 就可以和 -21.298 合并,这样最终的刻度标签会是

   x 10^-3 - 21.298
 0
-2
-4
-6

那么,我是不是错过了什么简单的方法来实现这个呢?谢谢大家!

2 个回答

1
ax.ticklabel_format(style='scientific', scilimits=(-1, 2), axis='y',useMathText=True)

useMathText=True 设置为真,可以把 1e-3 转换成 10 乘以 -3。

1

你可以使用ScalarFormatter来实现这个功能:

from matplotlib.ticker import ScalarFormatter

sf = ScalarFormatter()
sf.set_scientific(True)
sf.set_powerlimits((-0.00001, 0.00001))

ax = pylab.gca()
ax.yaxis.set_major_formatter(sf)
pylab.show()

你可以通过把一个数字传给format_data()来测试这个格式化工具会对这个数字做什么:

sf.format_data(0.002)
#'2{\\times}10^{-3}'

撰写回答