样条曲线(Spline Curves)是指给定一组控制点而得到一条曲线。样条曲线是经过一系列给定点的光滑曲线。最初,样条曲线都是借助于物理样条得到的,放样员把富有弹性的细木条(或有机玻璃条),用压铁固定在曲线应该通过的给定型值点处,样条做自然弯曲所绘制出来的曲线就是样条曲线。样条曲线不仅通过各有序型值点,并且在各型值点处的一阶和二阶导数连续,也即该曲线具有连续的、曲率变化均匀的特点。QChart中提供类QSplineSeries来创建样条曲线显示。
QSplineSeries
QSplineSeries类将数据显示为样条图。在样条中存储QPainterPath绘制样条所需的数据点和段控制点。数据更改时,将自动计算控制点。以便可以绘制法线样条。
以下代码说明了如何创建基本的样条图:
series = QSplineSeries()
series.append(0, 6)
series.append(2, 4)
...
chart.addSeries(series)
样条曲线示例
示例代码显示了如何创建简单的样条图。要创建样条图,我们需要将数据放入QSplineSeries中。QSplineSeries自动计算正确绘制样条线所需的样条线段控制点。然后将添加好数据的QSplineSeries对象添加到图表中,并用图表视图显示出来。完整代码如下:
import sys
from PyQt5.QtCore import Qt, QPointF
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtChart import QChartView, QChart, QSplineSeries
class DemoChartSpline(QMainWindow):
def __init__(self, parent=None):
super(DemoChartSpline, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战 Qt for Python: QChart样条曲线演示')
# 设置窗口大小
self.resize(480, 360)
self.createChart()
def createChart(self):
#样条图
splineSeries = QSplineSeries()
splineSeries.setName('spline')
splineSeries.append(0, 6)
splineSeries.append(2, 4)
splineSeries.append(3, 8)
splineSeries.append(7, 4)
splineSeries.append(10, 5)
splineSeries << QPointF(11, 1) << QPointF(13, 3) << QPointF(17, 6) << QPointF(18, 3) << QPointF(20, 2)
#创建图表
chart = QChart()
chart.legend().hide()
chart.addSeries(splineSeries)
chart.setTitle('简单样条曲线示例')
chart.createDefaultAxes()
chart.axes(Qt.Vertical)[0].setRange(0, 10) #纵坐标数值范围
#图表视图
chartView = QChartView(chart)
chartView.setRenderHint(QPainter.Antialiasing)
self.setCentralWidget(chartView)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoChartSpline()
window.show()
sys.exit(app.exec())
运行结果如下图:
QChart样条曲线演示
本文知识点
- 了解样条曲线。
- 使用QSplineSeries绘制样条曲线。