我正在尝试创建一个带有指数(?)Y 轴的 matplotlib 图,就像我在下面模拟的假图一样。对于我的数据,我想在它们接近最大 Y 值时将这些值展开。当 Y 接近零时,我想压缩这些值。
所有正常的“日志”示例都做相反的事情:它们在远离零时压缩值。这当然是“日志”所做的。如何创建指数(?)缩放?

从 matplotlib 3.1 开始,您可以通过以下方式轻松定义任何自定义比例
ax.set_yscale('function', functions=(forward, inverse))
Run Code Online (Sandbox Code Playgroud)
另见https://matplotlib.org/3.1.1/gallery/scales/scales.html
在这种情况下,例如:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 40, 100)
y = np.linspace(1, 4, 100)
fig, ax = plt.subplots()
ax.plot(x, y)
exp = lambda x: 10**(x)
log = lambda x: np.log(x)
# Set y scale to exponential
ax.set_yscale('function', functions=(exp, log))
ax.set(xlim=(1,40), ylim=(1,4))
ax.set_yticks([1, 3, 3.5, 3.75, 4.0])
plt.show()
Run Code Online (Sandbox Code Playgroud)
Tom*_*mmy -1
我假设你指的是 X 轴,因为在你的模拟图中,X 轴是指数的,而不是 Y 轴。
你可以这样做:
...
ax = plt.subplot(111)
ax.plot(Xs,Ys,color='blue',linewidth=2)
....
xlabs = [pow(10,i) for i in range(0,6)]
ax.set_xticklabels(xlabs)
ax.set_xticks(xlabs)
Run Code Online (Sandbox Code Playgroud)
我在这里所做的是手动创建一个包含 6 个 X 的列表,其中每个 X 都由 表示10^i,即10^1,10^2,...。这将放置 X 个刻度线,并在 处正确标记它们[1, 10, 100, 1000, 10000, 100000]。如果您需要更多标签,请更改6.