如何从日志图中删除科学符号?

2024-04-25 13:34:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望y轴只显示数字100、200和300,而不是用科学记数法。有什么想法吗

Current plot

简化代码:

from matplotlib import pyplot as plt
import numpy as np

x = np.logspace(2, 6, 20)
y = np.logspace(np.log10(60), np.log10(300), 20)

plt.scatter(x, y[::-1])
plt.xscale('log')
plt.yscale('log')

plt.show()

Tags: 代码fromimportlogplotmatplotlibasnp
1条回答
网友
1楼 · 发布于 2024-04-25 13:34:28

主定位器和次定位器确定刻度的位置。标准位置通过AutoLocator设置。NullLocator删除它们。一个MultipleLocator(x)每隔几次x显示一次滴答声

对于y轴,设置标准刻度位置将显示顶部的刻度,这些刻度彼此更接近,这由对数刻度确定。但是,由于范围较大,对x轴执行相同操作会使它们靠得太近。因此,对于x轴,由LogLocator确定的位置可以保持不变

格式化程序控制记号的显示方式。ScalarFormatter设置默认方式。有一个选项scilimits用于确定应使用科学符号表示的数值范围。由于1.000.000通常显示为1e6,设置scilimits=(-6,9)可以避免这种情况

from matplotlib import pyplot as plt
from matplotlib import ticker
import numpy as np

x = np.logspace(2, 6, 20)
y = np.logspace(np.log10(60), np.log10(300), 20)

plt.scatter(x, y[::-1])
plt.xscale('log')
plt.yscale('log')
ax = plt.gca()

# ax.xaxis.set_major_locator(ticker.AutoLocator())
ax.xaxis.set_minor_locator(ticker.NullLocator())  # no minor ticks
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())  # set regular formatting

# ax.yaxis.set_major_locator(ticker.AutoLocator())  # major y tick positions in a regular way
ax.yaxis.set_major_locator(ticker.MultipleLocator(100))  # major y tick positions every 100

ax.yaxis.set_minor_locator(ticker.NullLocator())  # no minor ticks
ax.yaxis.set_major_formatter(ticker.ScalarFormatter())  # set regular formatting

ax.ticklabel_format(style='sci', scilimits=(-6, 9))  # disable scientific notation

plt.show()

resulting plot

相关问题 更多 >