使用 matplotlib 在除 10 次幂以外的对数刻度上显示起始值

Showing the starting value on log scale other than the power of 10 using matplotlib

我一直面临着用对数刻度在 x 轴上显示起始值的挑战。这不是 10 的幂。不幸的是,我找不到在 x 轴上显示此起始值的方法。我正在使用 matplotlib,主要的限制是我必须保持图表的格式,因此请提出一种解决问题而不改变现有格式的方法。

代码:

   plt.plot(xdata,ydata)
   plt.xscale("log")
   plt.xlim([0.15, 30])
   plt.ylim([-10, 80])
   plt.minorticks_on()
   plt.grid(which = 'minor', linestyle=':', linewidth = '0.5', color = 'black')
   plt.grid(b = True, which = 'major', linestyle='-', linewidth = '1', color = '#666666')
   plt.show()

当前输出

期望的输出

如果您不介意使用常规格式(非工程格式)的中间刻度标签,这可行:

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


xdata = np.logspace(np.log10(0.15), np.log10(30))
ydata = np.random.random(len(xdata))

fig, ax = plt.subplots()
ax.plot(xdata, ydata, '-s')
ax.set_xscale("log")

一旦你有了情节,你可以手动设置刻度:

ax.set_xticks([0.15, 1, 10, 30])
ax.get_xaxis().set_major_formatter(ScalarFormatter())

获得: