"inverse" 在这个 ax.set_yscale 参数中做了什么,为什么它是用户定义的?

What does "inverse" do in this ax.set_yscale argument and why is it user-defined?

我最近发帖 询问如何在我制作的绘图的 y 轴上进行逆对数缩放。我接受的答案使用了这个代码-

def forward(x):
    return 2**x

def inverse(x):
    return np.log2(x)

ax.set_yscale('function', functions=(forward,inverse))

您的想法是将这两个函数修改为 1) 定义缩放轴的方程和 2) 反转它。我在正向和反向中更改了一些常量,以使缩放比例在我的实际应用中不那么明显。

def forward(x):
    return 1.1**x

def inverse(x):
    return 0.01*(np.log2(x))

然而,在摆弄上述常量之后,我注意到更改“正向”函数会改变绘图的比例,但更改“反向”函数似乎不会以任何方式改变它。即使在阅读 the documentation 之后,我仍然对反函数的目的是什么以及用户明确定义它的原因感到困惑。模块自己计算逆函数以消除用户定义函数出错的可能性不是更有意义吗?

查看 Developer's guide for creating scales and transformations,它说明了正向和反向变换:

[forward]:数据坐标到显示坐标的转换

[inverse]: 该转换的逆运算。例如,这用于将鼠标位置从屏幕 space 转换回数据 space.

至于

Wouldn't it make more sense for the module to calculate the inverse itself

我强烈反对。查找函数的反转可能 困难 (就像你的情况一样!),如果你打算首先制作自定义比例,你应该能够自己完成。

顺便说一句:例如,在你的情况下,我会说你的 def inverse() 是错误的,因为 WolframAlpha 发现 1.1**x 的倒数实际上是 10.4921*np.log(x),不是 0.01*(np.log2(x))