散点图 - QwtPlotCurve 散点模式¶
散点图用于展示数据的分布情况,每个数据点用独立的符号标记。在 Qwt 中,散点图通过 QwtPlotCurve 配合 QwtSymbol 实现。
主要功能特性¶
特性
- ✅ 多种符号形状:支持椭圆、矩形、菱形、三角形、十字等形状
- ✅ 符号样式自定义:可设置大小、填充色、边框色和边框宽度
- ✅ 高性能散点模式:使用
Dots样式可高效绘制百万级数据点 - ✅ 符号抖动显示:可避免重叠点的视觉遮挡
基本概念¶
散点图实现方式¶
Qwt 提供三种方式绘制散点图:
| 方式 | 曲线样式 | 说明 |
|---|---|---|
| NoCurve + Symbol | NoCurve |
仅显示符号,无连线 |
| Dots | Dots |
仅绘制像素点,最高性能 |
| Lines + Symbol | Lines |
连线与符号同时显示 |
性能对比¶
| 数据量 | NoCurve+Symbol | Dots |
|---|---|---|
| <1000点 | 快 | 最快 |
| 1000-10000点 | 较快 | 快 |
| >10000点 | 较慢 | 快 |
| >100000点 | 很慢 | 最快(推荐) |
使用方法¶
散点图的例子位于:examples/2D/scatterplot,例子截图如下:

1. 基本散点图¶
使用 NoCurve 样式和符号绘制散点图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
2. 高性能散点模式¶
对于大量数据点,使用 Dots 样式获得最佳性能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Dots vs Symbol 性能
Dots样式直接绘制像素点,适合百万级数据NoCurve + Symbol每个点都是一个完整的符号绘制对象,适合少量数据- 对于实时更新的散点图,推荐使用
Dots
3. 多种符号样式¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
4. 符号抖动显示¶
当多个数据点位置相近时,可以使用抖动避免重叠:
1 2 3 4 5 | |
抖动原理
抖动会在绘制时为每个点的X坐标添加随机偏移,使重叠点分散显示,便于观察数据密度分布。
5. 多组散点数据¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
6. 连线与符号组合¶
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
符号形状列表¶
| 形状 | 枚举值 | 说明 |
|---|---|---|
NoSymbol |
无符号 | 不显示符号 |
Ellipse |
椭圆 | 圆形或椭圆(根据Size) |
Rect |
矩形 | 正方形或矩形 |
Diamond |
菱形 | 菱形/钻石形 |
Triangle |
三角形 | 向上三角形 |
DTriangle |
倒三角 | 向下三角形 |
UTriangle |
上三角 | 等同于Triangle |
LTriangle |
左三角 | 向左三角形 |
RTriangle |
右三角 | 向右三角形 |
Cross |
十字 | +形十字 |
XCross |
X十字 | X形十字 |
Star1 |
星形 | 六角星 |
Star2 |
星形2 | 五角星 |
Hexagon |
六边形 | 正六边形 |
Path |
路径 | 自定义 QPainterPath |
自定义符号路径¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
符号核心方法¶
| 方法 | 说明 |
|---|---|
setStyle() |
设置符号形状 |
setSize() |
设置符号尺寸 |
setBrush() |
设置填充画笔 |
setPen() |
设置边框画笔 |
setPath() |
设置自定义路径 |
setPinPoint() |
设置符号锚点位置 |
drawSymbol() |
绘制符号 |
相关示例
- 散点图:
examples/2D/scatterplot - 符号演示:
playground/symbols - 曲线样式:
examples/2D/curvedemo