【Qwt 7.0 系列】高级科学图表 ------ 光谱图、向量场、K线图与极坐标绘图
本文是 Qwt 7.0 系列介绍和教程,如果你正在寻找一个高性能、协议友好、同时支持 2D 和 3D 绘图的 Qt 数据可视化库,那么这篇文章就是为你准备的。
系列总述文章:Qwt 7.0 ------ 基于 Qt 的高性能 2D/3D 绘图库
概述 | 高性能曲线绘制 | 常用图表类型 | 高级科学图表 | 多坐标轴与布局 | 交互功能 | 3D 数据可视化 | 坐标轴与刻度 | 控件与辅助元素 | 总体架构解析 | matplotlib 风格绘图
一、引言
如果说前 3 篇文章覆盖的是"通用图表",那么本篇要介绍的图表类型则更偏"专业领域"。你在做以下事情时,很可能需要它们:
- 温度场、压力场、电磁场的可视化 → 光谱图
- 流场、风速场、电场方向的展示 → 向量场图
- 股票/期货/外汇的行情分析 → K线图
- 实验数据误差棒、置信区间 → 区间曲线
- 雷达、天线辐射图、天文观测 → 极坐标绘图
Qwt 7.0 在这些专业图表上做了大量现代化改进,其中最值得关注的是两个 7.0 新增功能:QwtGridRasterData (网格栅格数据,支持双三次插值)和 QwtColorMapPreset(22 种科学 colormap 预设,直接对标 matplotlib)。
下面我们逐一讲解每种图表的实现方法。
二、光谱图 QwtPlotSpectrogram
2.1 什么是光谱图
光谱图(也叫热力图)将三维数据 (x, y, value) 映射到二维平面,用颜色来编码第三维的数值大小。它是科学数据可视化中最常用的图表类型之一。

典型的应用场景包括:
| 场景 | 说明 |
|---|---|
| 温度场 | 不同位置的温度分布 |
| 压力场 | 流体/气体的压力分布 |
| 频谱分析 | 信号在时频域的能量分布 |
| 地形高程 | 海拔高度的彩色渲染 |
| 医学影像 | CT/MRI 数据的伪彩色显示 |
2.2 基本使用
光谱图的核心是三个组件的配合:数据(QwtRasterData)+ 颜色映射(QwtColorMap)+ 绘图项(QwtPlotSpectrogram)。
cpp
#include <QwtPlot>
#include <QwtPlotSpectrogram>
#include <QwtRasterData>
#include <QwtColorMap>
// 1. 自定义栅格数据类 ------ 提供 (x, y) 位置的值
class SpectrogramData : public QwtRasterData
{
public:
SpectrogramData()
{
// 设置 X、Y、Z 三个轴的数据范围
setInterval(Qt::XAxis, QwtInterval(-1.5, 1.5));
setInterval(Qt::YAxis, QwtInterval(-1.5, 1.5));
setInterval(Qt::ZAxis, QwtInterval(0.0, 10.0)); // 值范围
}
// 核心方法:返回指定位置的值
virtual double value(double x, double y) const override
{
const double c = 0.842;
const double v1 = x * x + (y - c) * (y + c);
const double v2 = x * (y + c) + x * (y + c);
return 1.0 / (v1 * v1 + v2 * v2);
}
};
// 2. 创建绘图
QwtPlot* plot = new QwtPlot();
plot->setTitle("光谱图示例");
// 3. 创建光谱图绘图项
QwtPlotSpectrogram* spectrogram = new QwtPlotSpectrogram();
// 启用图像显示模式
spectrogram->setDisplayMode(QwtPlotSpectrogram::ImageMode, true);
// 设置颜色映射(7.0 推荐使用预设,见下文)
spectrogram->setColorMap(QwtColorMapPreset::create("viridis").release());
// 设置数据
spectrogram->setData(new SpectrogramData());
// 多线程渲染,提升大数据量下的渲染速度
spectrogram->setRenderThreadCount(0); // 0 = 使用系统默认线程数
spectrogram->attach(plot);
plot->replot();
2.3 Qwt 7.0 新增:QwtGridRasterData
在 Qwt 6.x 中,如果要将已有的网格矩阵数据喂给光谱图,通常使用 QwtMatrixRasterData。但它只支持最近邻和双线性插值,且数据组织方式不太灵活。
Qwt 7.0 新增了 QwtGridRasterData,它直接接收独立的 X 轴向量、Y 轴向量和二维值矩阵,并支持双三次插值(BicubicInterpolation),渲染效果更加平滑:
cpp
#include <QwtGridRasterData>
// 创建网格栅格数据(7.0 新增)
QwtGridRasterData* gridData = new QwtGridRasterData();
// X 轴坐标
QVector<double> xCoords;
for (int i = 0; i < 100; ++i)
xCoords << (i / 99.0) * 10.0;
// Y 轴坐标
QVector<double> yCoords;
for (int i = 0; i < 80; ++i)
yCoords << (i / 79.0) * 8.0;
// 二维值矩阵
QVector<QVector<double>> values;
for (int j = 0; j < yCoords.size(); ++j) {
QVector<double> row;
for (int i = 0; i < xCoords.size(); ++i) {
double dx = xCoords[i] - 5.0;
double dy = yCoords[j] - 4.0;
row << std::sin(dx) * std::cos(dy); // 示例函数
}
values << row;
}
// 一次性设置坐标和数据
gridData->setValue(xCoords, yCoords, values);
// 7.0 新增:双三次插值,渲染更平滑
gridData->setResampleMode(QwtGridRasterData::BicubicInterpolation);
spectrogram->setData(gridData);
QwtGridRasterData 支持三种重采样模式:
| 模式 | 枚举值 | 说明 |
|---|---|---|
| 最近邻 | NearestNeighbour |
速度快,有锯齿 |
| 双线性插值 | BilinearInterpolation |
平滑过渡,效果适中 |
| 双三次插值 | BicubicInterpolation |
7.0 新增,最平滑 |
2.4 Qwt 7.0 新增:22 种科学 colormap 预设
颜色映射是光谱图的灵魂。选对 colormap,数据的结构才能清晰呈现。Qwt 7.0 新增了 QwtColorMapPreset 类,内置了 22 种在科学计算领域广泛使用的 colormap 预设,直接对标 matplotlib 和 MATLAB:
cpp
#include <QwtColorMapPreset>
// 通过名称创建(大小写不敏感)
auto colorMap = QwtColorMapPreset::create("plasma");
spectrogram->setColorMap(colorMap.release());
// 或通过枚举创建
auto cmap = QwtColorMapPreset::create(QwtColorMapPreset::Viridis);
spectrogram->setColorMap(cmap.release());
完整的 22 种预设一览:
| 预设名称 | 枚举值 | 特点 |
|---|---|---|
| viridis | Viridis | 感知均匀,紫绿黄,matplotlib 默认 |
| plasma | Plasma | 感知均匀,紫橙黄 |
| inferno | Inferno | 感知均匀,黑红橙黄 |
| magma | Magma | 感知均匀,黑紫橙黄 |
| cividis | Cividis | 感知均匀,蓝灰黄,色盲友好 |
| jet | Jet | 蓝青绿黄红,MATLAB 经典 |
| hot | Hot | 黑红黄白 |
| cool | Cool | 青到品红 |
| spring / summer / autumn / winter | --- | 季节系列 |
| gray / bone / copper | --- | 灰度系列 |
| rainbow / hsv / turbo | --- | 彩虹系列 |
| coolwarm | CoolWarm | 蓝白红,发散型 |
| rdylbu / rdylgn / spectral | --- | 发散型多色 |
小贴士 :如果你的数据是连续型(如温度、高度),推荐使用
viridis、plasma等感知均匀的 colormap;如果是发散型数据(如偏差、相关系数),推荐coolwarm或spectral。
当然,你仍然可以像 6.x 那样手动构建 QwtLinearColorMap:
cpp
// 手动创建线性颜色映射
auto* colorMap = new QwtLinearColorMap(Qt::darkCyan, Qt::red);
colorMap->addColorStop(0.1, Qt::cyan);
colorMap->addColorStop(0.6, Qt::green);
colorMap->addColorStop(0.95, Qt::yellow);
spectrogram->setColorMap(colorMap);
2.5 等高线模式
除了颜色填充,光谱图还支持等高线显示。两种模式可以同时开启,效果类似地形图叠加等高线:

cpp
// 同时启用图像模式和等高线模式
spectrogram->setDisplayMode(QwtPlotSpectrogram::ImageMode, true);
spectrogram->setDisplayMode(QwtPlotSpectrogram::ContourMode, true);
// 设置等高线级别
QList<double> contourLevels;
for (double level = 0.5; level < 10.0; level += 1.0)
contourLevels += level;
spectrogram->setContourLevels(contourLevels);
// 设置等高线画笔
spectrogram->setDefaultContourPen(QPen(Qt::black, 0));
2.6 颜色条(Color Bar)
在坐标轴旁添加颜色条,让读者知道颜色对应的数值范围:
cpp
#include <QwtScaleWidget>
// 在右侧坐标轴添加颜色条
QwtScaleWidget* rightAxis = plot->axisWidget(QwtAxis::YRight);
rightAxis->setTitle("Intensity");
rightAxis->setColorBarEnabled(true);
rightAxis->setColorBarWidth(20);
// 设置颜色条的范围和颜色映射
const QwtInterval zInterval = spectrogram->data()->interval(Qt::ZAxis);
rightAxis->setColorMap(zInterval, QwtColorMapPreset::create("viridis").release());
plot->setAxisScale(QwtAxis::YRight, zInterval.minValue(), zInterval.maxValue());
plot->setAxisVisible(QwtAxis::YRight, true);
三、向量场图 QwtPlotVectorField
3.1 什么是向量场
向量场用于在二维平面上显示带方向和大小的向量数据。每个数据点不是一个标量值,而是一个箭头------箭头方向表示向量方向,箭头长度(或颜色)表示向量大小。

典型应用:流体力学中的流速场、电磁学中的电场/磁场、气象学中的风向场。
3.2 基本使用
向量场的数据结构是 QwtVectorFieldSample,包含位置 (x, y) 和向量分量 (vx, vy):
cpp
#include <QwtPlot>
#include <QwtPlotVectorField>
QwtPlot* plot = new QwtPlot();
plot->setTitle("向量场示例");
QwtPlotVectorField* vectorField = new QwtPlotVectorField();
// 准备向量数据
QVector<QwtVectorFieldSample> samples;
for (int x = 0; x < 10; x++) {
for (int y = 0; y < 10; y++) {
double vx = std::sin(y * 0.5); // X 方向分量
double vy = std::cos(x * 0.5); // Y 方向分量
samples << QwtVectorFieldSample(x, y, vx, vy);
}
}
vectorField->setSamples(samples);
vectorField->attach(plot);
plot->replot();
3.3 样式定制
可以控制箭头的缩放比例、颜色映射以及显示密度:
cpp
#include <QwtVectorFieldSymbol>
// 创建箭头符号
auto* symbol = new QwtVectorFieldSymbol();
symbol->setStyle(QwtVectorFieldSymbol::Arrow);
symbol->setPen(QPen(Qt::blue, 1));
vectorField->setSymbol(symbol);
// 设置向量长度的缩放因子
vectorField->setMagnitudeScaleFactor(0.5); // 箭头长度 = 实际大小 × 0.5
// 控制显示密度,避免箭头过于拥挤
vectorField->setSamplesPerInch(20); // 每英寸显示 20 个向量
// 根据向量大小设置颜色(从小到大:蓝→红)
QwtLinearColorMap* colorMap = new QwtLinearColorMap(Qt::blue, Qt::red);
vectorField->setColorMap(colorMap);
vectorField->setColorMagnitude(true); // 启用颜色映射
| 方法 | 说明 |
|---|---|
setSamples() |
设置向量数据 |
setSymbol() |
设置箭头符号样式 |
setMagnitudeScaleFactor() |
箭头长度的缩放因子 |
setSamplesPerInch() |
控制显示密度 |
setColorMap() |
设置颜色映射 |
setColorMagnitude() |
启用按大小着色 |
四、K线图 QwtPlotTradingCurve
4.1 什么是K线图
K线图(蜡烛图)是金融领域最经典的图表类型。每根K线包含四个价格数据:开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close),简称 OHLC。

Qwt 提供了专门的 QwtPlotTradingCurve 类来绘制K线图,支持蜡烛图和美国线两种样式,并能自动区分涨跌颜色。
4.2 数据结构
每根K线的数据由 QwtTradingSample 表示:
cpp
struct QwtTradingSample {
double time; // 时间点(X 轴位置)
double open; // 开盘价
double close; // 收盘价
double high; // 最高价
double low; // 最低价
};
4.3 基本K线图
cpp
#include <QwtPlot>
#include <QwtPlotTradingCurve>
QwtPlot* plot = new QwtPlot();
plot->setTitle("股票K线图");
QwtPlotTradingCurve* curve = new QwtPlotTradingCurve("日K线");
// 设置为蜡烛图样式
curve->setStyle(QwtPlotTradingCurve::CandleStick);
// 设置涨跌颜色(中国市场惯例:红涨绿跌)
curve->setSymbolBrush(QwtPlotTradingCurve::Positive,
QBrush(Qt::red)); // 涨:红色实心
curve->setSymbolBrush(QwtPlotTradingCurve::Negative,
QBrush(Qt::green)); // 跌:绿色实心
// 箱体宽度(相对坐标单位)
curve->setSymbolExtent(0.8); // 占 80% 宽度
// 准备K线数据
QVector<QwtTradingSample> samples;
samples << QwtTradingSample(1, 10.0, 10.5, 11.0, 9.5); // 第1天,涨
samples << QwtTradingSample(2, 10.5, 10.2, 10.8, 10.0); // 第2天,跌
samples << QwtTradingSample(3, 10.2, 10.8, 11.2, 10.1); // 第3天,涨
samples << QwtTradingSample(4, 10.8, 10.6, 11.0, 10.4); // 第4天,跌
curve->setSamples(samples);
curve->attach(plot);
plot->setAxisScale(QwtAxis::YLeft, 9, 12);
plot->replot();
4.4 涨跌状态与颜色约定
QwtPlotTradingCurve 会自动根据开盘价和收盘价的关系判断涨跌:
| 状态 | 枚举值 | 判断条件 |
|---|---|---|
| 上涨 | Positive |
close > open |
| 下跌 | Negative |
close < open |
| 平盘 | Neutral |
close == open |
颜色约定因市场而异:中国市场习惯红涨绿跌 ,国际市场习惯绿涨红跌 。通过 setSymbolBrush() 和 setSymbolPen() 可以分别设置填充色和边框色:
cpp
// 涨:红色填充 + 深红边框
curve->setSymbolBrush(QwtPlotTradingCurve::Positive, QBrush(Qt::red));
curve->setSymbolPen(QwtPlotTradingCurve::Positive, QPen(Qt::darkRed, 1));
// 跌:绿色填充 + 深绿边框
curve->setSymbolBrush(QwtPlotTradingCurve::Negative, QBrush(Qt::green));
curve->setSymbolPen(QwtPlotTradingCurve::Negative, QPen(Qt::darkGreen, 1));
// 平盘:灰色
curve->setSymbolBrush(QwtPlotTradingCurve::Neutral, QBrush(Qt::gray));
curve->setSymbolPen(QwtPlotTradingCurve::Neutral, QPen(Qt::black, 1));
4.5 配合均线和成交量
K线图通常会叠加移动平均线(MA)和成交量柱状图,形成完整的行情分析视图:
cpp
#include <QwtPlotCurve>
#include <QwtPlotBarChart>
// 5日均线
QwtPlotCurve* ma5 = new QwtPlotCurve("MA5");
ma5->setPen(QPen(Qt::blue, 1));
ma5->setSamples(ma5Data);
ma5->attach(plot);
// 成交量柱状图
QwtPlotBarChart* volumeChart = new QwtPlotBarChart("成交量");
volumeChart->setSamples(volumes);
volumeChart->setBrush(QBrush(Qt::gray));
volumeChart->attach(plot);
五、区间曲线 QwtPlotIntervalCurve
5.1 什么是区间曲线
区间曲线用于绘制带有上下限范围的数据。与普通曲线只显示一个确定值不同,区间曲线的每个数据点包含一个中值和一个 [min, max] 区间。它常用于:
- 实验数据的误差棒
- 统计分析的置信区间
- 预测模型的预测区间
- 时间序列的波动范围
5.2 基本使用
区间曲线的数据结构是 QwtIntervalSample:
cpp
struct QwtIntervalSample {
double value; // 中值(曲线位置)
QwtInterval interval; // 区间范围 [min, max]
};
cpp
#include <QwtPlot>
#include <QwtPlotIntervalCurve>
#include <QwtInterval>
QwtPlot* plot = new QwtPlot();
plot->setTitle("区间曲线示例");
QwtPlotIntervalCurve* curve = new QwtPlotIntervalCurve("误差范围");
// Tube 样式:绘制填充的区间区域
curve->setStyle(QwtPlotIntervalCurve::Tube);
// 中值曲线样式
curve->setPen(QPen(Qt::blue, 2));
// 区间填充样式(半透明蓝色)
curve->setBrush(QBrush(QColor(100, 150, 200, 100)));
// 准备数据
QVector<QwtIntervalSample> samples;
samples << QwtIntervalSample(5.0, QwtInterval(4.0, 6.0));
samples << QwtIntervalSample(8.0, QwtInterval(6.5, 9.5));
samples << QwtIntervalSample(10.0, QwtInterval(8.0, 12.0));
samples << QwtIntervalSample(12.0, QwtInterval(10.0, 14.0));
curve->setSamples(samples);
curve->attach(plot);
plot->replot();
5.3 误差棒样式
除了 Tube 填充样式,还可以使用 ErrorBars 样式绘制标准的误差棒:
cpp
#include <QwtIntervalSymbol>
curve->setStyle(QwtPlotIntervalCurve::ErrorBars);
curve->setPen(QPen(Qt::black, 1));
// 创建误差棒符号
auto* symbol = new QwtIntervalSymbol(QwtIntervalSymbol::Bar);
symbol->setPen(QPen(Qt::black, 1));
symbol->setWidth(8); // 误差棒横线宽度(像素)
curve->setSymbol(symbol);
区间曲线支持三种样式:
| 样式 | 枚举值 | 说明 |
|---|---|---|
| 无曲线 | NoCurve |
仅显示区间填充或符号 |
| 管状填充 | Tube |
绘制上下边界之间的填充区域 |
| 误差棒 | ErrorBars |
绘制带横线的误差棒线条 |
六、极坐标绘图 QwtPolarPlot
6.1 什么是极坐标绘图
前面所有的图表都基于笛卡尔坐标系(X-Y 直角坐标)。但在某些领域,数据天然适合用极坐标表示------用角度 和半径 来定位。QwtPolarPlot 就是 Qwt 提供的极坐标绘图控件。

典型应用:雷达扫描图、天线辐射方向图、天文星图、方向分布统计。
6.2 基本使用
cpp
#include <QwtPolarPlot>
#include <QwtPolarGrid>
#include <QwtPolarCurve>
// 创建极坐标绘图
QwtPolarPlot* polarPlot = new QwtPolarPlot();
polarPlot->setTitle("极坐标图示例");
// 设置角度范围(0-360度)
polarPlot->setScale(QwtPolar::Azimuth, 0.0, 360.0);
// 设置半径范围
polarPlot->setScale(QwtPolar::Radius, 0.0, 100.0);
// 创建极坐标网格(同心圆 + 角度射线)
QwtPolarGrid* grid = new QwtPolarGrid();
grid->showGrid(QwtPolarGrid::Azimuth, true); // 角度网格线(射线)
grid->showGrid(QwtPolarGrid::Radius, true); // 半径网格线(同心圆)
grid->setPen(QPen(Qt::gray, 0.5));
grid->attach(polarPlot);
// 创建极坐标曲线
QwtPolarCurve* curve = new QwtPolarCurve("曲线数据");
// 准备数据(角度,半径)
QVector<QwtPointPolar> samples;
for (int angle = 0; angle < 360; angle += 10) {
double radius = 50 + 30 * std::sin(angle * 3.0 * M_PI / 180.0);
samples << QwtPointPolar(angle, radius);
}
curve->setSamples(samples);
curve->setPen(QPen(Qt::blue, 2));
curve->attach(polarPlot);
polarPlot->replot();
极坐标的数据点使用 QwtPointPolar,包含角度和半径两个分量。它还可以从笛卡尔坐标自动转换:
cpp
// 从笛卡尔坐标构造极坐标点
QwtPointPolar polar(QPointF(3.0, 4.0)); // 自动计算:角度 ≈ 53.13°,半径 = 5
6.3 极坐标光谱图
Qwt 还支持在极坐标系下绘制光谱图,非常适合雷达数据显示:

极坐标光谱图将常规的矩形光谱图"弯曲"到圆形区域中,角度对应方位角,半径对应距离,颜色对应信号强度。这在雷达、声纳等领域极为常用。
6.4 极坐标标记
和普通坐标系一样,极坐标系也支持标记点:
cpp
#include <QwtPolarMarker>
QwtPolarMarker* marker = new QwtPolarMarker();
marker->setPosition(QwtPointPolar(90.0, 80.0)); // 角度90°,半径80
// 标记符号
QwtSymbol* symbol = new QwtSymbol(QwtSymbol::Cross,
Qt::NoBrush, QPen(Qt::red, 2), QSize(10, 10));
marker->setSymbol(symbol);
// 标记标签
QwtText label("关键点");
label.setColor(Qt::red);
marker->setLabel(label);
marker->setLabelAlignment(Qt::AlignCenter);
marker->attach(polarPlot);
6.5 极坐标核心方法
| 方法 | 说明 |
|---|---|
setScale() |
设置坐标轴范围 |
setScaleMaxMajor() |
设置主刻度数量 |
setScaleMaxMinor() |
设置次刻度数量 |
setScaleEngine() |
设置刻度引擎(支持对数刻度) |
replot() |
刷新绘图 |
七、与旧版本(Qwt 6.x)的区别
如果你从 Qwt 6.x 迁移过来,本篇涉及的图表有以下几个重要变化:
7.1 QwtGridRasterData(7.0 新增)
这是 7.0 全新增加的栅格数据类。与 6.x 的 QwtMatrixRasterData 相比:
| 特性 | QwtMatrixRasterData (6.x) | QwtGridRasterData (7.0 新增) |
|---|---|---|
| 数据组织 | 扁平一维数组 + 宽度 | 独立的 X/Y 向量 + 二维矩阵 |
| 最近邻插值 | 支持 | 支持 |
| 双线性插值 | 支持 | 支持 |
| 双三次插值 | 不支持 | 支持(渲染更平滑) |
| 像素提示 | 基础 | 优化 |
如果你的数据本身就是网格形式的(X 坐标数组、Y 坐标数组、二维值矩阵),使用 QwtGridRasterData 更加自然,无需手动展平为一维数组。
7.2 QwtColorMapPreset(7.0 新增)
在 6.x 中,要使用类似 matplotlib 的科学 colormap,需要手动查找颜色停止点并逐个添加到 QwtLinearColorMap,非常繁琐。7.0 的 QwtColorMapPreset 内置了 22 种预设,一行代码即可创建:
cpp
// 6.x 的方式:手动添加颜色停止点
auto* cmap = new QwtLinearColorMap(
QColor(68, 1, 84), QColor(253, 231, 37));
cmap->addColorStop(0.125, QColor(72, 36, 117));
cmap->addColorStop(0.250, QColor(64, 67, 135));
// ... 还有很多行
// 7.0 的方式:一行搞定
auto cmap = QwtColorMapPreset::create("viridis");
7.3 坐标轴 API
7.0 使用 QwtAxis::YRight、QwtAxis::YLeft 等新枚举替代了 6.x 的 QwtPlot::yRight。旧枚举通过兼容宏仍可使用,但新代码建议使用新枚举。
八、总结与下期预告
本篇介绍了 Qwt 7.0 中 5 种高级科学图表的实现方法:
| 图表类型 | 核心类 | 典型应用 |
|---|---|---|
| 光谱图 | QwtPlotSpectrogram |
温度场、压力场、频谱分析 |
| 向量场 | QwtPlotVectorField |
流场、电磁场、风向场 |
| K线图 | QwtPlotTradingCurve |
股票/期货/外汇行情 |
| 区间曲线 | QwtPlotIntervalCurve |
误差棒、置信区间 |
| 极坐标 | QwtPolarPlot |
雷达、天线方向图、天文数据 |
其中两个 7.0 新功能值得特别关注:
- QwtGridRasterData:支持双三次插值的网格栅格数据类,让光谱图渲染更平滑
- QwtColorMapPreset:22 种科学 colormap 预设,一行代码对标 matplotlib 的配色方案
这些功能让 Qwt 7.0 在科学可视化领域的易用性和专业性都上了一个台阶。
系列文章
- 第 1 篇:快速入门与核心新特性概览
- 第 2 篇:曲线绘图详解 ------ 从基础到百万级数据性能优化
- 第 3 篇:常用图表类型实战 ------ 柱状图、散点图、箱线图与直方图
- 第 4 篇:高级科学图表 ------ 光谱图、向量场、K线图与极坐标绘图
- 第 5 篇:多坐标轴与多绘图布局 ------ 寄生绘图与 QwtFigure 容器
- 第 6 篇:交互功能详解 ------ 平移、缩放、坐标轴交互与数据拾取
- 第 7 篇:3D 数据可视化 ------ OpenGL 高性能三维绘图
- 第 8 篇:坐标轴与刻度系统 ------ 刻度引擎、网格、图例与刻度朝内
- 第 9 篇:控件与辅助元素 ------ 滑块旋钮、标记与装饰
- 第 10 篇:总体架构解析 ------ 从单体到三库模块化的演进
- 第 11 篇:matplotlib 风格绘图 ------ QwtPyPlot 接口详解
相关链接