移动曲线底部而不改变两端
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()
我的曲线如下:
曲线是用以下代码生成的:
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()