SciPy单调三次样条插值

时间:2018-12-18 05:17:06

标签: python scipy spline

我正在PyQt中绘制一些图形,我需要使用monotone cubic spline interpolation来获得漂亮的平滑线(不会扩展其边界)。 SciPi有一个我可以使用的CubicSpline对象,但是它不是“单调的”。有没有简单的方法可以做到这一点?遗憾的是,我的数学知识是基础知识,我真的不懂微积分,因此阅读文档非常不成功。

这是我的摘录,根据我的摘录,从一系列数据点推断出平​​滑的样条并将其绘制到QRectF中:

def range_map(value, from_min, from_max, to_min, to_max):
    left_span = from_max - from_min
    right_span = to_max  - to_min
    value_scaled = float(value - from_min) / float(left_span)
    return to_min + (value_scaled * right_span)

def graph_cubic_spline(dataset, graph_max_x, graph_max_y, plot_rect):
    graphd_points = []

    x_vals = range(len(dataset))
    y_vals = dataset
    cs = CubicSpline(x_vals, y_vals, bc_type="natural") # this is obviously where I need to make any modifications

    # graph the values on the plot area
    sample_factor = 10
    x_increment = plot_rect.width() / graph_max_x
    for sample in range(((len(dataset) - 1) * sample_factor) + 1):
        index = sample/sample_factor
        x_val = index
        y_val = cs(x_val)

        x_pos = (x_increment * x_val) = plot_rect.left()
        y_pos = range_map(y_val, 0, graph_max_y, plot_rect.bottom(), plot_rect.top())
        graphd_points.append((x_pos, y_pos, index))

    return graphd_points

0 个答案:

没有答案