首页 > 其他分享 >QCustomPlot绘制热力图

QCustomPlot绘制热力图

时间:2024-07-30 19:27:02浏览次数:8  
标签:colorMap grayGradient myCustomPlot 力图 waveform QCustomPlot 绘制 yMax

绘制的热力图类似以下,后面代码可以直接去使用。

// 在 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

相关文章

  • OpenCV绘制轴功能的问题
    我正在使用OpenCVContrib4.10.0版本检测charuco板。一旦我检测并估计了它的姿态,我就会尝试绘制轴;但是,如果我改变它们的长度,即使一切保持不变,我也可以看到不同的轴。我提供了示例图像、相机参数和要重现的代码。也看看附加的图像。importosi......
  • 在指定的 json 边界内绘制 hexbin 截断
    我正在绘制一个单独的hexbin图和json边界文件。不过,hexbin网格与边界文件重叠。我只想展示非洲大陆。我的目标是在非洲大陆内切断或分割六边形网格因此,边界文件之外不应显示任何网格方块。有没有办法使用Plotly来实现这一点?预期的输出是截断或剪切非洲大陆之外的......
  • 在python中使用turtle绘制图案(带点)
    我正在尝试使用python中的海龟制作一幅赫斯特画(点图案)。我设法实现了它。Hirst_painting_dot_pattern但是我的for循环没有按照我预期的方式工作。它省略了最后一次迭代。在下面的代码中,我的for循环没有生成最后一个点。因此,我在循环末尾添加了一行来制作最后......
  • ARFoundation系列讲解 - 93 Immersal GoPro绘制地图
    一、Immerasal地图绘制的方式1.MapperAPP地图绘制:这种⽅式不需要数据处理操作,更适合⼩场景、测试使⽤。只能生成点云模型,无法生成真实环境网格模型。2. 全景相机地图绘制:使⽤全景相机采集原始数据建图的优势在于:全景图⽚视野覆盖范围⼤,可以⽤更少的照⽚完成较⼤场景地图(......
  • 使用十六进制值绘制颜色网格
    我有一个代表不同颜色的十六进制值列表。如何在颜色网格中表示这些十六进制值。也就是说,可视化每个十六进制值的颜色。谢谢。可以使用多种方法来使用十六进制值绘制颜色网格,以下列出了一些方法:1.使用HTML和CSS可以创建一个简单的HTML表格,并使用十......
  • Unity Shader动画:用代码绘制动态视觉效果
    在Unity中,Shader是运行在GPU上的小程序,用于控制顶点和像素的渲染过程。通过编写自定义Shader,开发者可以创造出各种令人惊叹的动画效果,从简单的颜色变化到复杂的流体模拟。本文将探讨如何使用UnityShader来实现动画效果。Shader动画简介Shader动画是指使用Shader代码来控......
  • 绘制行星位置随时间的函数
    我一直在尝试模拟绕太阳运动的行星和小行星,我发现了这个链接:如何在已经绘制的椭圆上绘制行星轨道作为时间的函数?并且我决定研究并尝试其中的代码。但似乎我要么使用错误,要么代码错误,因为当我绘制火星、地球、木星、水星和金星的轨道时,它们似乎与美国宇航局的在线模拟......
  • 前端绘制一个好看炫酷的流程图
    文章目录一、效果图二、直接上代码一、效果图因为是图片,所以不能展示动画效果,你们要看具体效果,就复制下面的代码到自己的项目里面去二、直接上代码<template><divclass="part"><divclass="line_box"><svgheight="505"width="450"><d......
  • 【参数化建模】利用Python在Abaqus里面绘制复杂曲线——以“爱心曲线”为例
    【参数化建模】利用Python在Abaqus里面绘制复杂曲线——以“爱心曲线”为例说在前面Python在Abaqus里面可以批量处理很多事情,包括复杂曲线的绘制,这里以心形线为例。心形线函数这里我们选取一款比较经典的心形线:Abaqus代码#--coding:utf-8--importnumpyasnpfr......
  • 微信小程序地图Map结合canvas实现手动绘制地图区域
    1.功能概述在微信小程序中,用户手动在地图上绘制区域,将绘制的区域边界点转换为经纬度在地图上显示绘制的区域。此功能实现了用户与地图的交互,可以应用于地理围栏、区域标记等场景。2.实现步骤2.1获取用户位置在小程序加载时,使用wx.getLocation获取用户的当前位置,并......