Я рисую некоторые графики в 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