如何显示带有详细科学记数法偏移量的轴刻度标签?

问题描述 投票:0回答:1

我正在尝试生成一个具有多个子图的图形,其中每个子图的轴刻度标签应以相同的方式格式化。由于数字很大,以清晰的格式显示刻度标签很棘手。我喜欢详细的科学偏移量 b x 10^c 的 matplotlib 格式(参见右下图),其中显示的刻度标签 a 可以解释为 (b+a) x 10^c

但是,我无法找到如何控制此刻度标签格式化程序的使用。在我看来,matplotlib 决定使用它非常不一致。

这是我的初始代码,它产生了后续的情节:

import matplotlib.pyplot as plt

targets = [[-167297.54344731, -167301.10372634, -167308.44207031, -167312.11313287],[-145434.59446349, -145430.40561915, -145432.73985156, -145432.6785802]]
preds = [[-167298.46656051, -167300.59898357, -167308.72554459, -167311.71904965],[-145433.43693344, -145429.41508183, -145432.73929695, -145431.94648615]]

fig, axs = plt.subplots(nrows=1, ncols=2)

# For each subplot
for i in range(2):

    # make subplot square    
    min_max = [min(targets[i]+preds[i]), max(targets[i]+preds[i])]
    offset = 2
    axs[i].set_ylim(min_max[0]-offset, min_max[1]+offset)
    axs[i].set_xlim(min_max[0]-offset, min_max[1]+offset)
    axs[i].set_aspect("equal")
    
    axs[i].scatter(targets[i], preds[i])

左侧的刻度格式不正确,右侧的刻度格式正确。

我尝试使用

matplotlib.ticker.ScalarFormatter
,它允许我获取 10^c 形式的刻度标签,而不是所需的 b x 10^c。设置
axs[i].xaxis.set_major_locator(plt.MaxNLocator(4))
似乎也会间歇性地影响是否使用所需的格式。

所以,我的问题是:如何强制使用科学记数格式为 b x 10^c 的刻度标签偏移量?

python matplotlib formatter xticks yticks
1个回答
0
投票

使用

matplotlib.ticker
确实可以提供解决方案。

formatter = ticker.ScalarFormatter(useOffset=True, useMathText=True)
formatter.set_scientific(True)
formatter.set_powerlimits((-3, 4))  # define when to apply scientific notation

axs[i].xaxis.set_major_formatter(formatter)
axs[i].yaxis.set_major_formatter(formatter)

powerlimits
定义哪些数字以科学计数法显示,哪些以十进制计数法显示,指的是 10 的指数。在区间之外为科学计数,在十进制以内计数。

结果: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.