当前位置: 首页 > news >正文

色谱图QCPColorMap

一、QCPColorMap 概述

QCPColorMap 是 QCustomPlot 中用于绘制二维颜色图的类,可以将矩阵数据可视化为颜色图(热力图),支持自定义色标和插值方式。

二、主要属性

属性类型描述
dataQCPColorMapData存储颜色图数据的对象
interpolatebool是否启用像素插值
tightBoundarybool是否紧密贴合数据边界
colorScaleQCPColorScale*关联的色标
gradientQCPColorGradient使用的颜色渐变
nameQString颜色图名称
visiblebool是否可见
selectablebool是否可选择
selectedbool当前是否被选中

色渐变QCPColorGradient,它决定了颜色图的数据对应的是什么颜色,QCPColorGradient预定义了9种颜色渐变,如下图所示: 

 

三、常用方法

1. 数据相关方法

方法参数返回值描述
setDataQCPColorMapData *datavoid设置数据对象
data-QCPColorMapData*获取数据对象
updateColors-void强制更新颜色
rescaleDataRangebool recalculateDataBoundsvoid重新缩放数据范围

2. 样式设置方法

方法参数返回值描述
setInterpolatebool enabledvoid设置是否插值
setTightBoundarybool enabledvoid设置紧密边界
setColorScaleQCPColorScale *colorScalevoid设置关联色标
setGradientconst QCPColorGradient &gradientvoid设置颜色渐变
setSelectedPenconst QPen &penvoid设置选中边框画笔
setSelectedBrushconst QBrush &brushvoid设置选中填充画刷

3. 交互相关方法

方法参数返回值描述
setSelectableQCP::SelectionType selectablevoid设置可选择类型
selectTestconst QPointF &pos, bool onlySelectable, QVariant *detailsdouble测试点是否选中

四、信号

信号参数描述
selectionChangedbool selected选中状态改变时触发
selectableChangedQCP::SelectionType selectable可选择状态改变时触发

五、基础使用示例

cpp

// 创建颜色图
QCPColorMap *colorMap = new QCPColorMap(customPlot->xAxis, customPlot->yAxis);// 设置数据维度 (nx, ny)
int nx = 200;
int ny = 200;
colorMap->data()->setSize(nx, ny);// 设置数据范围
colorMap->data()->setRange(QCPRange(0, 10), QCPRange(0, 10));// 填充数据
for (int x=0; x<nx; ++x) {for (int y=0; y<ny; ++y) {double dx = 10.0*x/(nx-1);double dy = 10.0*y/(ny-1);double value = sin(dx)*cos(dy);colorMap->data()->setCell(x, y, value);}
}// 设置颜色渐变
colorMap->setGradient(QCPColorGradient::gpThermal);// 添加色标
QCPColorScale *colorScale = new QCPColorScale(customPlot);
customPlot->plotLayout()->addElement(0, 1, colorScale);
colorScale->setType(QCPAxis::atRight);
colorMap->setColorScale(colorScale);// 设置轴标签
customPlot->xAxis->setLabel("X Axis");
customPlot->yAxis->setLabel("Y Axis");
colorScale->axis()->setLabel("Value");// 自动调整范围
colorMap->rescaleDataRange();
customPlot->rescaleAxes();// 刷新显示
customPlot->replot();

六、高级功能示例

1. 自定义颜色渐变

cpp

// 创建自定义渐变
QCPColorGradient customGradient;
customGradient.setColorStopAt(0.0, Qt::blue);
customGradient.setColorStopAt(0.5, Qt::green);
customGradient.setColorStopAt(1.0, Qt::red);
colorMap->setGradient(customGradient);// 设置渐变类型 (线性/对数)
colorMap->setGradient(QCPColorGradient::gpThermal);
colorMap->gradient().setNanColor(Qt::gray); // 设置NaN值的颜色

2. 实时更新数据

cpp

// 创建定时器更新数据
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, [=](){static double phase = 0;phase += 0.1;// 更新数据for (int x=0; x<nx; ++x) {for (int y=0; y<ny; ++y) {double dx = 10.0*x/(nx-1);double dy = 10.0*y/(ny-1);double value = sin(dx + phase)*cos(dy + phase);colorMap->data()->setCell(x, y, value);}}colorMap->rescaleDataRange();customPlot->replot();
});
timer->start(100); // 每100ms更新一次

3. 添加数据选择交互

cpp

// 启用选择
colorMap->setSelectable(QCP::stSingleData);// 连接选择信号
connect(customPlot, &QCustomPlot::plottableClick, [=](QCPAbstractPlottable *plottable, int dataIndex){if (plottable == colorMap) {int x, y;colorMap->data()->indexToCell(dataIndex, x, y);double key = colorMap->data()->keyRange().lower + x*colorMap->data()->keyRange().size()/colorMap->data()->keySize();double value = colorMap->data()->valueRange().lower + y*colorMap->data()->valueRange().size()/colorMap->data()->valueSize();double z = colorMap->data()->cell(x, y);qDebug() << "点击位置: (" << key << "," << value << ") 值: " << z;}
});

七、性能优化技巧

  1. 数据分块处理

    cpp

    // 对于大数据集,分块处理
    const int blockSize = 100;
    for (int x=0; x<nx; x+=blockSize) {for (int y=0; y<ny; y+=blockSize) {// 处理当前块...}
    }
  2. 关闭抗锯齿

    cpp

    colorMap->setAntialiased(false); // 提高渲染性能
  3. 使用OpenGL加速

    cpp

    customPlot->setOpenGl(true); // 启用OpenGL加速
  4. 限制重绘区域

    cpp

    // 只重绘颜色图所在区域
    colorMap->layer()->replot();

八、QCPColorMapData 关键方法

方法参数描述
setSizeint keySize, int valueSize设置数据矩阵大小
setRangeQCPRange keyRange, QCPRange valueRange设置数据范围
setKeyRangeQCPRange keyRange设置键轴范围
setValueRangeQCPRange valueRange设置值轴范围
setCellint keyIndex, int valueIndex, double z设置单个单元格值
setDatadouble key, double value, double z通过坐标设置值
cellToCoordint keyIndex, int valueIndex, double *key, double *value索引转坐标
coordToCelldouble key, double value, int *keyIndex, int *valueIndex坐标转索引

QCPColorMap 是科学数据可视化的强大工具,特别适合显示二维矩阵数据,如温度分布、地形高度、概率密度等。通过合理配置,可以创建出高度定制化的热力图可视化效果。

相关文章:

  • React Router V7使用详解
  • 用于手部康复设备的TinyML语音分类嵌入式人工智能模块
  • OpenCV 对图像进行阈值处理 cv2.threshold
  • 【Rust 精进之路之第11篇-借用·实践】切片 (Slices):安全、高效地引用集合的一部分
  • Opencv图像处理:轮廓检测、轮廓近似、绘制外接圆外接矩形
  • 嵌入式学习——opencv图像库编程
  • puzzle(0531)脑力航迹
  • 33-公交车司机管理系统
  • [ABAQUS有限元分析] 1.单个零件静力学分析
  • Nginx在微服务架构项目(Spring Cloud)中的强大作用
  • 30元一公斤的樱桃甜不甜
  • 《Operating System Concepts》阅读笔记:p748-p748
  • MySQL:9.表的内连和外连
  • 山东大学创新项目实训开发日志(19)之前端知识深度学习
  • 2-6-1-1 QNX编程入门之进程和线程(八)
  • 二叉树的顺序结构及实现
  • 【Flutter】使用LiveKit和Flutter构建实时视频聊天应用
  • 【Docker项目实战】使用Docker部署Jupyter Notebook服务
  • Spring 微服务解决了单体架构的哪些痛点?
  • 深度解析 PointNet:点云深度学习的开山之作
  • 一周人物| 萨韦利上海画展,陆永安“从董源到塞尚”
  • 李家超:香港特区政府积极推进十五运会各项筹办工作
  • 从高铁到住房:“富足议程”能否拯救美国的进步主义?
  • 老总们带着产品直奔对接会,外贸拓内销找到更多“新路子”
  • “杭州六小龙”爆火出圈后,浙江高规格部署人工智能发展
  • 因在罗博特科并购项目中执业违规,东方证券、国浩所均遭警示