SciPy Монотонная кубическая сплайн-интерполяция - PullRequest
0 голосов
/ 18 декабря 2018

Я рисую некоторые графики в PyQt, и мне нужно использовать монотонную кубическую сплайн-интерполяцию , чтобы получить красивые плавные линии (которые не расширяют их границы).У 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
...