绘制的热力图类似以下,后面代码可以直接去使用。
// 在 QCustomPlot 中创建图像
QCustomPlot* myCustomPlot = new QCustomPlot();
ui->verticalLayout->addWidget(myCustomPlot);
// 向量大小为 3787 * 6132
int xMax = 6132;
int yMax = 3787;
Eigen::MatrixXd waveform(3787,6132);
waveform.setRandom(); // 填充随机数据
// 设置坐标轴范围
myCustomPlot->xAxis->setRange(0,xMax);
myCustomPlot->yAxis->setRange(yMax,0);
myCustomPlot->yAxis->setRangeReversed(true); // 设置y轴刻度翻转
// 获取矩阵最大值和最小值
double maxVal = waveform.maxCoeff();
double minVal = waveform.minCoeff();
// 创建颜色映射 在创建之前要先设置 plot对象 坐标轴范围
QCPColorMap *colorMap = new QCPColorMap(myCustomPlot->xAxis, myCustomPlot->yAxis);
colorMap->data()->setSize(xMax,yMax); // 应与图像数据的尺寸匹配
colorMap->data()->setRange(QCPRange(0, xMax), QCPRange(0, yMax)); // 决定x轴y轴的数值显示
colorMap->setDataRange(QCPRange(minVal, maxVal)); // 设置数据范围
// colorMap->rescaleDataRange(); // 自动调整颜色映射范围 不设置数据范围可以自适应 这俩行代码实际有些多余 去掉也没关系
// colorMap->setInterpolate(false); // 是否在数据点之间进行插值
// 填充颜色映射数据
for (int x = 0; x < xMax; ++x)
{
for (int y = 0; y < yMax; ++y)
{
// 注意数据坐标
colorMap->data()->setCell(x, y, waveform(y, x)); // 请注意这里的 y, x 顺序
}
}
// 创建颜色尺度(颜色条) 设置图例显示
QCPColorScale *colorScale = new QCPColorScale(myCustomPlot);
myCustomPlot->plotLayout()->addElement(0, 1, colorScale); // 第一行 第二列设置坐标 图例的位置
colorMap->setColorScale(colorScale);
// 自定义显示热力图的颜色梯度 不创建会使用默认的
QCPColorGradient grayGradient;
// 设置颜色插值方式为 RGB 颜色模式显示的区别
grayGradient.setColorInterpolation(QCPColorGradient::ciRGB);
grayGradient.setColorStopAt(0.25, QColor(100, 100, 100)); // 中灰色
grayGradient.setColorStopAt(0.5, QColor(150, 150, 150)); // 浅灰色
grayGradient.setColorStopAt(0.75, QColor(200, 200, 200)); // 更浅的灰色
grayGradient.setColorStopAt(1.0, QColor(255, 255, 255)); // 白色
colorMap->setGradient(grayGradient); // 添加梯度显示
// myCustomPlot->rescaleAxes(); // 自动调整 QCustomPlot 中所有轴的范围
myCustomPlot->replot();
标签:colorMap,grayGradient,myCustomPlot,力图,waveform,QCustomPlot,绘制,yMax
From: https://blog.csdn.net/weixin_73535565/article/details/140803201