(二)QCustomPlot生成热力图/矩阵颜色图

系列文章目录

提示:这里是该系列文章的所有文章的目录
第一章: (一)QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现
第二章: (二)QCustomPlot生成热力图/矩阵颜色图
第三章: (三)Qt+QCustomPlot生成上下方向/不同颜色的条形图(柱形图)
第四章 :(四)QCustomPlot柱形图动态显示实例开发


文章目录

  • 系列文章目录
  • 前言
  • 一、模拟数据生成静态热力图
  • 二、改变Z值生成动态效果
  • 三、基于前文增加的代码总结/下载链接
  • 总结


前言

本文主要讲述了使用QCustomPlot图形库实现热力图的方法,这里的热力图也叫颜色图,本文实现了一个10x10矩阵的热力图,具体实现方式查看代码。文中实例是在上一篇文章实例基础上进行修改的,所以文中放置主要代码,需要完整代码可通过文末百度网盘链接进行下载。

项目效果
请添加图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、模拟数据生成静态热力图

1.创建QCPColorMap热力图及QCPColorScale色条

void MainWindow::setupHeatMap(QCustomPlot *customPlot)
{//x轴设置QSharedPointer<QCPAxisTickerFixed> intTicker_X(new QCPAxisTickerFixed);intTicker_X->setTickStep(1);                                      //设置刻度之间的步长为1intTicker_X->setScaleStrategy(QCPAxisTickerFixed::ssMultiples);   //设置缩放策略customPlot->xAxis->setTicker(intTicker_X);                        //应用自定义整形ticker,防止使用放大功能时出现相同的x刻度值customPlot->xAxis->ticker()->setTickCount(11);                    //刻度数量customPlot->xAxis->setNumberFormat("f");                          //x轴刻度值格式customPlot->xAxis->setNumberPrecision(0);                         //刻度值精度//customPlot->xAxis->setLabel("X轴");                             //设置标签customPlot->xAxis->setLabelFont(QFont(font().family(),8));        //设置标签字体大小customPlot->xAxis->setRange(0,10,Qt::AlignLeft);                  //设置x轴范围customPlot->xAxis->setSubTicks(false);                            //设置子刻度隐藏//customPlot->xAxis->setSubTickLength(2,0);                       //子刻度长度customPlot->xAxis->setTickLength(5,0);                            //主刻度长度customPlot->xAxis->grid()->setPen(QPen(Qt::black));               //设置主刻度线网格线显示,设置为Qt::NoPen就不会显示customPlot->xAxis->grid()->setSubGridVisible(false);              //设置子刻度网格线是否可见//y轴设置QSharedPointer<QCPAxisTickerFixed> intTicker_Y(new QCPAxisTickerFixed);intTicker_Y->setTickStep(1);intTicker_Y->setScaleStrategy(QCPAxisTickerFixed::ssMultiples);customPlot->yAxis->setTicker(intTicker_Y);customPlot->yAxis->ticker()->setTickCount(11);customPlot->yAxis->setNumberFormat("f");customPlot->yAxis->setNumberPrecision(0);//customPlot->yAxis->setLabel("Y轴");customPlot->yAxis->setLabelFont(QFont(font().family(),8));customPlot->yAxis->setRange(0,10,Qt::AlignLeft);customPlot->yAxis->setSubTicks(false);//customPlot->yAxis->setSubTickLength(2,0);customPlot->yAxis->setTickLength(5,0);customPlot->yAxis->grid()->setPen(QPen(Qt::black));customPlot->yAxis->grid()->setSubGridVisible(false);//模拟数据:{行,列,值}QVector<QVector<double>> data ={{0,0,5},{0,1,1},{0,2,9},{0,3,0},{0,4,2},{0,5,0},{0,6,0},{0,7,0},{0,8,0},{0,9,9},{1,0,7},{1,1,0},{1,2,0},{1,3,2},{1,4,0},{1,5,0},{1,6,1},{1,7,1},{1,8,3},{1,9,0},{2,0,1},{2,1,1},{2,2,0},{2,3,0},{2,4,3},{2,5,0},{2,6,0},{2,7,0},{2,8,0},{2,9,7},{3,0,7},{3,1,3},{3,2,9},{3,3,7},{3,4,0},{3,5,0},{3,6,6},{3,7,5},{3,8,1},{3,9,0},{4,0,0},{4,1,3},{4,2,0},{4,3,0},{4,4,2},{4,5,1},{4,6,0},{4,7,0},{4,8,0},{4,9,2},{5,0,2},{5,1,1},{5,2,7},{5,3,3},{5,4,0},{5,5,0},{5,6,9},{5,7,7},{5,8,2},{5,9,0},{6,0,1},{6,1,0},{6,2,0},{6,3,0},{6,4,3},{6,5,0},{6,6,0},{6,7,0},{6,8,0},{6,9,6},{7,0,1},{7,1,0},{7,2,3},{7,3,8},{7,4,0},{7,5,0},{7,6,7},{7,7,8},{7,8,0},{7,9,0},{8,0,1},{8,1,0},{8,2,6},{8,3,0},{8,4,5},{8,5,0},{8,6,0},{8,7,0},{8,8,1},{8,9,2},{9,0,1},{9,1,0},{9,2,3},{9,3,0},{9,4,0},{9,5,0},{9,6,0},{9,7,8},{9,8,0},{9,9,9},};QCPColorMap *heatmap = new QCPColorMap(customPlot->xAxis,customPlot->yAxis);   //构造一个颜色图heatmap->data()->setSize(10,10);   //设置颜色图数据维度,代表你的数据矩阵(10x10),这里可以理解为有多少个小方块heatmap->data()->setRange(QCPRange(0.5,9.5), QCPRange(0.5,9.5));   //颜色图在x、y轴上的范围,这里可以查看下setRange函数定义for(int x=0;x<10;x++){for(int y=0;y<10;y++){int z = data.at(10 * y + x).at(2);if(z){heatmap->data()->setCell(x, y, z);    //如果z不为0,则设置颜色值的位置}else{heatmap->data()->setAlpha(x, y, 0);   //z为0,设置为透明,根据需求来设置}}}QCPColorScale *colorScale = new QCPColorScale(customPlot);   //构造一个色条colorScale->setType(QCPAxis::atBottom);                      //水平显示customPlot->plotLayout()->addElement(1, 0, colorScale);      //在颜色图下面显示heatmap->setColorScale(colorScale);                          //设置色条QCPColorGradient gradient;                                   //色条使用的颜色渐变gradient.setColorStopAt(0.0, QColor("#54ff9f"));             //设置渐变在指定位置的颜色(从0到1),最小为0.0gradient.setColorStopAt(0.5, QColor("#f6efa6"));             //设置色条分段的颜色gradient.setColorStopAt(1.0, QColor("#cd2626"));             //设置色条结束时的颜色,最大为1.0heatmap->setGradient(gradient);                              //设置颜色渐变//heatmap->rescaleDataRange();                               //自动计算数据范围,数据范围决定了哪些数据值映射到QCPColorGradient的颜色渐变当中heatmap->setDataRange(QCPRange(0, 10));                      //设置数据范围heatmap->setInterpolate(false);                              //禁用插值,界面显示小方块//保持色条与轴矩形边距一致QCPMarginGroup *marginGroup = new QCPMarginGroup(customPlot);customPlot->axisRect()->setMarginGroup(QCP::msLeft | QCP::msRight, marginGroup);colorScale->setMarginGroup(QCP::msLeft | QCP::msRight, marginGroup);//刷新界面customPlot->replot(QCustomPlot::rpQueuedReplot);
}

二、改变Z值生成动态效果

1.定时器内随机改变Z值

//热力图刷新定时器
void MainWindow::slot_mapTimeOut()
{auto *colorMap = static_cast<QCPColorMap *>(cusHeatMap->plottable(0));int keySize = colorMap->data()->keySize();int valueSize = colorMap->data()->valueSize();for(int x=0;x<keySize;x++){for (int y=0;y<valueSize;y++){//if(colorMap->data()->alpha(x,y))   //判断当前是否透明//{//如果之前有设置透明,依然会透明colorMap->data()->setCell(x,y, QRandomGenerator::global()->bounded(0,10));   //0-10直接随机值,可查看bounded定义//}}}cusHeatMap->replot(QCustomPlot::rpQueuedReplot);   //括号内参数作用是避免重复绘制
}

三、基于前文增加的代码总结/下载链接

1.mainwindow.h

class MainWindow : public QMainWindow
{Q_OBJECTpublic:...void InitHeatMap();void setupHeatMap(QCustomPlot *customplot);private slots:...void slot_mapTimeOut();void on_action_heatMap_triggered();void on_action_heatMap_2_triggered();private:...//热力图QCustomPlot *cusHeatMap;QTimer *mapTimer;}

2.mainwindow.cpp

//构造函数中添加InitHeatMap();
void MainWindow::InitHeatMap()
{cusHeatMap = new QCustomPlot();cusHeatMap = ui->widget_color;//热力图刷新定时器mapTimer = new QTimer();connect(mapTimer,SIGNAL(timeout()),this,SLOT(slot_mapTimeOut()));
}void MainWindow::setupHeatMap(QCustomPlot *customPlot)
{//该函数内容见前文...
}void MainWindow::slot_mapTimeOut()
{//该函数内容见前文...
}void MainWindow::on_action_heatMap_triggered()
{setupHeatMap(cusHeatMap);
}void MainWindow::on_action_heatMap_2_triggered()
{mapTimer->start(1000);   //开启定时器实现动态热力图效果
}

3.mainwindow.ui
请添加图片描述

4.完整代码百度网盘链接
https://pan.baidu.com/s/1aIvEe6pMI15M9K2H0FWRJQ
提取码:xxcj


总结

本文示例使用QCustomPlot绘制热力图的时候,可以发现所用的数据格式为{x,y,z},其中了x、y两个位置可以看作矩阵的x行y列,还有一个z数值,z数值对应着色条中渐变的颜色取值,需要注意的是渐变在指定位置的颜色是有范围的(0-1),可以使用heatmap->data()->setAlpha(x,y,z)将指定位置数据设为透明。

本系列文章下一篇:(三)Qt+QCustomPlot生成上下方向/不同颜色的条形图(柱形图)


hello:
共同学习,共同进步,如果还有相关问题,可在评论区留言进行讨论。

参考博客:QCustomPlot之热力图(十四)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26830.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts 地图类型热力图

地图主要用于地理区域数据的可视化&#xff0c;配合 visualMap 组件用于展示不同区域的人口分布密度等数据。 visualMap 是视觉映射组件&#xff0c;用于进行『视觉编码』&#xff0c;也就是将数据映射到视觉元素&#xff08;视觉通道&#xff09;。echarts 官网案例&#xff…

pyecharts绘制天气热力图

pyecharts绘制天气热力图 文章目录 前言 一、数据源 二、成果图 三、绘制步骤 1.引入库 2.数据处理 3.绘制函数 4.保存 总结 前言 基于爬取中国气象局数据后&#xff0c;生成的透视表不够美观&#xff0c;采用excel生成报表操作重复。可以考虑使用pyecharts进行热力图生成&…

Echarts数据可视化series-heatmap热力图,开发全解+完美注释

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解&#xff08;点击进入&#xff09;&#xff1a; title详解、 tooltip详解、toolbox详解、legend详解、dataZoom详解、…

echarts地图+热力图

综合了网上的大佬的概述&#xff0c;做了一下比较亲民的优化&#xff0c;json文件可以在下面的链接上定制&#xff0c;经纬度可以用百度地图的坐标拾取器和获取&#xff0c;图中以青岛为例&#xff0c;感谢大佬们的之前的贡献&#xff0c;可以让后来人用上现成的&#xff0c;话…

可视化 | 教你用Python实现热力图(二)

本文正在参与新星计划Python学习方向&#xff0c;详情请看&#xff1a;(93条消息) &#xff4c;&#xff49;&#xff46;&#xff45;&#xff49;&#xff4e;的博客_CSDN博客-SQL SERVER,计算机三级——数据库领域博主 目录 一、导引 二、内容 &#xff08;一&#xff0…

heatmap.js来绘制热力图

Heatmap.js 一、简介二、使用2.1 上手2.2 设置点的半径2.3 添加底图2.4 更多 三、高级用法3.1 动态热力图3.2 鼠标跟随热力图3.3 显示数值 一、简介 Heatmap.js V2.0 是目前网络上最先进的热图可视化库。新的2.0版本 Heatmap.js 更快&#xff0c;拥有更强的渲染模块&#xff0…

可视化图形(二):热力图-imshow()

官方文档&#xff1a;https://matplotlib.org/api/_as_gen/matplotlib.pyplot.imshow.html?highlightimshow#matplotlib.pyplot.imshow imshow(X, cmapNone, normNone, aspectNone, interpolationNone, alphaNone, vminNone, vmaxNone, originNone, extentNone, shapeNone, f…

网页点击热力图统计

热力图&#xff0c;要么对方填写button click的名字&#xff0c;对应后台&#xff08;类似事件&#xff09;&#xff0c;要么靠坐标系来做通用的&#xff0c;这里考虑通用做法&#xff0c;做起来也是一个通用服务。 另外&#xff0c;我这边没有调研怎么显示的&#xff0c;感觉开…

可视化神器Plotly绘制热力图

公众号&#xff1a;尤而小屋作者&#xff1a;Peter编辑&#xff1a;Peter 大家好&#xff0c;我是Peter~ 之前更新了很多关于Plotly绘图的文章。今天带来的文章是基于官网和实际案例来讲解如何绘制不同需求下的热力图。 Plotly中绘制热力图有3种方式&#xff1a;heatmap、ims…

pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)

一、概述 在上一篇文章中&#xff0c;链接如下&#xff1a;https://www.cnblogs.com/xiao987334176/p/13791061.html 已经介绍了pyecharts画一些基本图形&#xff0c;接下来介绍画地图 二、世界地图 from pyecharts import options as opts from pyecharts.charts import Map f…

seaborn—sns.heatmap绘制热力图

heatmap(热力图)是识别预测变量与目标变量相关性的方法&#xff0c;同时&#xff0c;也是发现变量间是否存在多重共线性的好方法。 中文文档 seaborn.heatmap(data, vminNone, vmaxNone, cmapNone, centerNone, robustFalse, annotNone, fmt.2g, annot_kwsNone,linewidths0, …

Heatmap 热力图(1)

Heatmap 热力图&#xff08;1&#xff09; 显示多个对象&#xff0c;单个属性之间的关系的时候&#xff0c;用柱状图就可以直观的比较&#xff1b;当需要比较多个对象多个属性之间的差异时&#xff0c;需要用热力图。 基于R的heatmaply和plotly交互式热力图 安装&#xff1a;…

Tableau-热力图

Tableau-表格基础上制作热力图 前言1、度量维度制作热力图1.1 拖拽维度到行或者列1.2 拖拽度量1.3 标记度量数据为颜色 2、维度维度制作热力图2.1 拖拽两个维度分别当作行和列2.2 拖拽度量 前言 热力图的制作方便我们进行根据颜色的深浅直接观察&#xff0c;而颜色深浅又是由相…

【热力图】区域地图热力图,百度地图api

最简单的地图热力图&#xff0c;用的是百度的api&#xff0c;所以取经纬度的时候最好也用百度地图。 这里已经填好百度api的key了&#xff0c;但还是建议大家注册使用自己的key&#xff0c;因为有每日额度&#xff0c;超过访问次数了就不可用了。 <script type"text/…

python热力图实现

目录 一、数据无量纲化处理 (热力图) 1.数据无量纲化处理(仅介绍本文用到的方法):min-max归一化 2.代码展示 3.效果展示 二、皮尔斯系数相关(热力图) 1.数学知识 2.代码展示(有不懂的可以私聊) 3.seaborn.heatmap属性介绍 1&#xff09;Seaborn是基于matplotlib的Pyth…

一、python可视化——热力图

热力图 1、利用热力图可以看数据表里多个特征两两的相似度。参考官方API参数及地址&#xff1a; seaborn.heatmap(data, vminNone, vmaxNone,cmapNone, centerNone, robustFalse, annotNone, fmt’.2g’, annot_kwsNone,linewidths0, linecolor’white’, cbarTrue, cbar_kws…

(GIS可视化)热力图

我们经常在百度地图上看到类似这种的热力图&#xff0c;那么这种热力图究竟是什么原理&#xff1f;我们如何应用它来分析实际问题呢&#xff1f; 1.热力图原理 热力图这个名字可能听起来很高大上&#xff0c;但是实际上它等同于我们常说的密度图。 看到上面的图片你可能 会想…

echarts 热力图heatmap

1、配置data热力图主要通过颜色去表现数值的大小,必须要配合visualMap组件使用。可以应用在直角坐标系以及地理坐标系上直角坐标系上必须要使用两个类目轴。当坐标轴为直接坐标轴时,根据x、y轴每项数据相交形成的网格来进行定位,如x:[aa,bb],y:[cc,dd],(0,0)表示第一排第一个da…

热力图可视化 plt cmap

热力图可视化 import matplotlib.pyplot as plt plt.imsave(savename, data, vmin0, vmaxdata_max, cmapturbo)cmap 的其它选择&#xff08;如 magma&#xff0c;jet&#xff09;&#xff1a; 其中cmap"jet"结果类似如下&#xff1a;

热力图 sns.heatmap 调整 图内,坐标轴,color bar 字体大小

原始 首先准备一个文件&#xff0c;我用的是csv文件 我们先看一下最原始的效果&#xff1a; 代码为&#xff1a; student pd.read_csv(./input/small_data.csv) plt.figure(figsize(25, 10)) sns.heatmap(student.corr(), annotTrue, cmapYlGnBu) plt.savefig(relevance.pn…