matplotlib对数轴:仅显示10的幂

5 投票
2 回答
10468 浏览
提问于 2025-04-18 13:08

我有一个对数坐标图,x轴的范围是从10的9次方到10的12次方。(这是我第一次发帖,所以无法上传我的图像)

我想把x轴和y轴改成只显示10的幂次,比如在x轴上显示9、10、11、12。

我用了matplotlib.ticker.LogFormatterExponent(base=10.0, labelOnlyBase=True),但效果不是很好。有没有什么建议?

2 个回答

3

在半对数图上,把X轴的数据用线性刻度画出来会不会很简单呢?

plt.semilogy(np.log10(x), y)

这样一来,X轴的刻度就会变成十的幂次。

举个例子:

import numpy as np
import matplotlib.pyplot as plt

# create some data
x = 10**np.linspace(0,9,100)
y = np.sqrt(100 + x)

# plot the figure
fig = plt.figure()
ax = fig.add_subplot(111)
ax.semilogy(np.log10(x), y)

ax.set_xlabel("$10^x$")
ax.set_ylabel("$\sqrt{100 + x}$")

这样就可以得到:

在这里输入图片描述

7

LogFormatterExponent(base=10.0, labelOnlyBase=True) 的功能正常。

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

x = 10**np.linspace(8.5,12.6)
y = np.sin(x)

fig,ax = plt.subplots()
ax.scatter(x,y)
ax.set_xscale('log')
ax.set_xlabel("Quantity [$10^{x}]$")

logfmt = matplotlib.ticker.LogFormatterExponent(base=10.0, labelOnlyBase=True)
ax.xaxis.set_major_formatter(logfmt)

plt.show()

在这里输入图片描述

撰写回答