移动曲线底部而不改变两端

Move the bottom of a curve without changing both ends

我的曲线如下:

曲线是用以下代码生成的:

import matplotlib.pyplot as plt
import numpy as np

# normalize array
def min_max_scale_array(arr):
    arr = np.array(arr)
    return (arr - arr.min())/(arr.max()-arr.min())

x = np.linspace(-50,48,100)
y = x**2 + 2*x + 2  

x = min_max_scale_array(x)
y = min_max_scale_array(y)

fig, ax = plt.subplots()
ax.plot(x, y)

如何通过只移动左下角(或右下角)并保持两端相同来生成新曲线?谢谢!

编辑:任何曲线生成算法都值得赞赏,只要它有效!

最简单的解决方案:对 x 应用次线性变换 - 二次函数即可。

x = x**2  # works because x is scaled to 0-1
ax.plot(x, y)

UPD:根据要求,比例因子类似于:

scaling_factor = 0.7
x = scaling_factor*(x**2) + (1-scaling_factor)*x

这样做的一种方法是像以前一样定义 x,y,但应用转换。虚线显示您是否只是移动它。但是现在在最上面 y 我们不想移动它,所以我们想在底部 (y=0) 对移动后的版本进行加权 1 但在顶部(y=1) by 0 这样我们就得到了一个渐进的插值。我们可以通过将移位乘以 (1-y):

来做到这一点

a = 0.25  # how far to shift left
plt.plot(x, y, 'k')
plt.plot(x-a, y, 'k:')
plt.plot(x-a*(1-y), y, 'r')
plt.show()