如何将matplotlib中x记号的科学记数法乘数从10^5更改为10^3?

7qhs6swi  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(143)

我正在使用Python 3.9和matplotlib 3.7,在macos上的jupyter笔记本电脑上工作。
x值的范围为0到500 000。打开科学记数法时,它使用10^5作为数量级。我希望它显示为10^3的倍数
下面是一些示例代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 5e5, 10e3)
y = np.random.random_sample(len(x))

mm = 1 / 25.4

f, ax = plt.subplots(figsize=(210 * mm, 148 * mm), dpi=600)

ax.plot(x, y)
ax.ticklabel_format(axis='x', style='sci', scilimits=(0,0),useMathText=True, useOffset=False)

得出以下结果:x ticks as multiples of 10^5
我希望5 x 10^5显示为500 x 10^3,例如
我尝试使用ticklabel_formatter函数中的参数创建一个mpl.ticker.ScalarFormatter对象,但是在向其提供对象时,我得到了一个位置错误,因为它需要2个参数。
我尝试将powerlimits属性和orderOfMagnitude属性设置为3,但是ScalarFunction拒绝了这些关键字参数。
我看了这篇文章here,但是xaxis.set_major_formatter不接受我的格式化程序对象。

iyfjxgzm

iyfjxgzm1#

您需要使用matplotlib.ticker模块来实现这一点。
因此,实现方式如下所示:

import numpy as np
import matplotlib.pyplot as plt

import matplotlib.ticker as ticker

x = np.arange(0, 5_00000, 10_000)
y = np.random.random_sample(len(x))

mm = 1 / 25.4

f, ax = plt.subplots(figsize=(210 * mm, 148 * mm), dpi=600)

# Define a custom tick label formatting function
def format_tick_label(x, pos):
    return f"{x/1000:.0f}e3"

# Set the x-axis tick labels to multiples of e3
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_tick_label))


ax.plot(x, y)

结果如下所示:

不容易找到,所以这里有一个链接到文档:
https://matplotlib.org/stable/api/ticker_api.html

相关问题