简化matplotlib轴中的科学记数法/偏移

e5nqia27  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(188)

我正在尝试使用matplotlib绘制一个大数据图。matplotlib简化了y轴上的数字,这是预期的。但是,有太多无用的前导零,我无法找到删除的方法。
下面是一个可重复的例子:

import matplotlib.pyplot as plt
y = [i for i in range(10400000000000000, 10400750000000000,500000000000)]
x = [i for i in range(len(y))]
plt.plot(x,y)
plt.show()

我得到的结果是这样的:

我知道如何禁用useOffset,但我希望y轴的顶部保留科学记数法,只写1e11+1.04e16而不是1e11+1.0400000000e16

mkshixfv

mkshixfv1#

你可以通过matplotlib.ticker模块很容易地做到这一点。你所要做的就是把这个代码片段添加到你的代码中。

import matplotlib.ticker as ticker

fig, ax = plt.subplots
ax.plot(x, y)
# Initializing the formatter
formatter = ticker.ScalarFormatter(useMathText = True)
formatter.set_scientific(True)
formatter.set_powerlimits((-1, 1))
ax.yaxis.set_major_formatter(formatter)

# And finally plotting our graph
plt.show()

这段代码将以科学的形式生成结果,即显示x10^11+1.04*10^16
如果您对所需的输出有特定要求,请尝试下面的代码,

import matplotlib.pyplot as plt

y = [i for i in range(10400000000000000, 10400750000000000,500000000000)]
x = [i for i in range(len(y))]

fig, ax = plt.subplots()
ax.plot(x, y)

ax.annotate("1e11+1.04e16", (x[-1], y[-1]), xytext=(x[-1]-100, y[-1]+1000000000), arrowprops=dict(facecolor='red', shrink=0.05))

plt.show()

第二个代码使用annotate方法。所以要传递的参数是要以所需格式显示的文本,第二个参数指定x和y坐标。希望这能有所帮助!

相关问题