qcustomplot彩图
时间: 2025-01-06 16:27:19 浏览: 7
### 使用 QCustomPlot 绘制彩色图表
为了创建一个带有色彩映射的高质量图表,可以利用 `QCPColorMap` 类来实现。下面展示了一个完整的例子,该例子展示了如何初始化数据并将其应用于颜色图中。
```cpp
#include "qcustomplot.h"
#include <cmath>
// 创建一个新的 QCustomPlot 实例
QCustomPlot *customPlot = new QCustomPlot;
// 准备二维数组作为输入数据源
const int rows = 20;
const int cols = 30;
double data[rows][cols];
for (int row = 0; row < rows; ++row) {
for (int col = 0; col < cols; ++col) {
double zValue = std::sin(row / 18.0 * M_PI) * std::cos(col / 40.0 * M_PI);
if ((row % 5 == 0 && col % 7 != 0))
zValue = NAN; // 插入一些 NaN 值模拟缺失的数据点[^2]
data[row][col] = zValue;
}
}
// 设置颜色地图范围以及分辨率
QCPColorMap *colorMap = new QCPColorMap(customPlot->xAxis, customPlot->yAxis);
colorMap->data()->setSize(rows, cols);
colorMap->data()->setRange(QCPRange(0, cols), QCPRange(0, rows));
// 将准备好的数据填充到 Color Map 中
for (int i = 0; i < rows; ++i){
for(int j=0;j<cols;++j){
if(std::isnan(data[i][j])){
colorMap->data()->setAlpha(j,i,0); // 对于空值设置透明度为零使其不可见
}else{
colorMap->data()->setCell(j, i, data[i][j]);
}
}
}
// 添加颜色条以便更好地理解数值分布情况
QCPColorScale *colorScale = new QCPColorScale(customPlot);
customPlot->plotLayout()->addElement(0, 1, colorScale);
colorScale->setType(QCPAxis::atRight);
// 关联颜色条与颜色图的颜色梯度
colorScale->axis()->setLabel("Intensity");
colorMap->setColorScale(colorScale);
colorScale->setVisible(true);
// 应用默认配色方案给颜色图
colorMap->setGradient(QCPColorGradient::gpPolar);
colorMap->rescaleDataRange();
// 调整坐标轴标签和刻度线样式
customPlot->xAxis->setLabel("X Axis Label");
customPlot->yAxis->setLabel("Y Axis Label");
// 显示窗口中的绘图部件
customPlot->replot();
```
这段程序首先定义了一组正弦波形样式的测试数据,并故意加入了一些无效 (`NaN`) 的位置以模仿实际应用场景下的不完全测量结果。接着通过遍历这些数据点,对于有效的位置正常填充值,而对于那些被标记成 `NaN` 的地方,则调整其对应的像素透明度至最低,从而达到隐藏的效果而不是让软件自行填补空白区域内的假定值。
阅读全文