我正在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