【问题标题】:What does "inverse" do in this ax.set_yscale argument and why is it user-defined?在这个 ax.set_yscale 参数中“逆”做了什么,为什么它是用户定义的?
【发布时间】:2020-12-03 22:13:29
【问题描述】:

我最近发布了a question,我在其中询问如何在 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 之后,我仍然对反函数的用途以及用户明确定义它的原因感到困惑。模块自己计算逆来消除用户定义函数出错的机会不是更有意义吗?

【问题讨论】:

    标签: python function matplotlib scaling


    【解决方案1】:

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

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

    [inverse]:该变换的逆。例如,这用于将鼠标位置从屏幕空间转换回数据空间。

    至于

    模块自己计算逆不是更有意义

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

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

    【讨论】:

    • 谢谢,我已经好几年没上过数学课了,所以我想我的逆可能不正确,这是我问题背后的担忧的一部分。所以只是为了澄清(如果我错了,请纠正我),倒数用于将显示坐标转换回数据坐标? (如果编码人员不只是想完全删除转换?)
    • @ChristineB 是的。你需要那个逆,例如用于在鼠标悬停时获取正确的数据坐标,或者例如用于通过鼠标点击选择数据点。
    • 这是有道理的。我不做交互式绘图,所以我可能不必担心太多。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2020-06-23
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2018-04-19
    相关资源
    最近更新 更多