欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 色谱图QCPColorMap

色谱图QCPColorMap

2025/4/23 13:41:46 来源:https://blog.csdn.net/byxdaz/article/details/147367995  浏览:    关键词:色谱图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 是科学数据可视化的强大工具,特别适合显示二维矩阵数据,如温度分布、地形高度、概率密度等。通过合理配置,可以创建出高度定制化的热力图可视化效果。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词