创建样条图时,它会在图表内部产生循环,并且某些部分超出了图表面板。请找到以下代码
ChartView {
title: "Spline"
anchors.fill: parent
antialiasing: true
SplineSeries {
name: "SplineSeries"
XYPoint { x: 154593917; y: 612.5 }
XYPoint { x: 154594277; y: 425 }
XYPoint { x: 154594632; y: 437 }
XYPoint { x: 154594997; y: 460 }
XYPoint { x: 154595357; y: 506 }
XYPoint { x: 154596073; y: 513 }
XYPoint { x: 154596437; y: 527 }
XYPoint { x: 154596797; y: 575 }
XYPoint { x: 154597517; y: 632 }
XYPoint { x: 154597877; y: 369 }
XYPoint { x: 154598237; y: 410 }
XYPoint { x: 154598851; y: 414 }
XYPoint { x: 154604971; y: 633 }
XYPoint { x: 154605331; y: 598 }
XYPoint { x: 154605400; y: 500 }
}
}
如何删除此循环?请帮助
答案 0 :(得分:4)
问题出在以下事实:SplineSeries
正在创建spline(分段多项式)来插值。 QtCharts不对样条参数(例如度,控制点等)提供任何控制。所有这些参数都是从数据集中自动计算得出的。
您应该注意样条线的性质:它们将通过数据点,但是其余的点将由内部的多项式函数近似,因此创建意外点。为了创建分段曲线,必须满足一些约束条件,例如C ^ 0,C ^ 1和C ^ 2 continuity(假设三次样条)。为了满足您的要求,曲线必须 loop 。
QtCharts并没有提供太多的XY绘图选项,基本上是ScatterSeries
(对单个点进行绘图),LineSeries
(线性插值,没有用于平滑的选项)和SplineSeries
(平滑,样条线) -基于插值)。
要使用另一个,只需将SplineSeries
替换为LineSeries
。这里有一个示例,说明它们与数据的外观:
作为中点解决方案,您可以使用其他更适合您要求的插值方法(例如composite Bèzier curves)对数据进行预处理,然后在更多点上评估曲线以创建更平滑的数据,与SplineSeries
更加友好,或者,如果您觉得还不错,可以使用LinesSeries
直接呈现。