色谱图QCPColorMap
一、QCPColorMap 概述
QCPColorMap 是 QCustomPlot 中用于绘制二维颜色图的类,可以将矩阵数据可视化为颜色图(热力图),支持自定义色标和插值方式。
二、主要属性
| 属性 | 类型 | 描述 |
|---|---|---|
data | QCPColorMapData | 存储颜色图数据的对象 |
interpolate | bool | 是否启用像素插值 |
tightBoundary | bool | 是否紧密贴合数据边界 |
colorScale | QCPColorScale* | 关联的色标 |
gradient | QCPColorGradient | 使用的颜色渐变 |
name | QString | 颜色图名称 |
visible | bool | 是否可见 |
selectable | bool | 是否可选择 |
selected | bool | 当前是否被选中 |
色渐变QCPColorGradient,它决定了颜色图的数据对应的是什么颜色,QCPColorGradient预定义了9种颜色渐变,如下图所示:
三、常用方法
1. 数据相关方法
| 方法 | 参数 | 返回值 | 描述 |
|---|---|---|---|
setData | QCPColorMapData *data | void | 设置数据对象 |
data | - | QCPColorMapData* | 获取数据对象 |
updateColors | - | void | 强制更新颜色 |
rescaleDataRange | bool recalculateDataBounds | void | 重新缩放数据范围 |
2. 样式设置方法
| 方法 | 参数 | 返回值 | 描述 |
|---|---|---|---|
setInterpolate | bool enabled | void | 设置是否插值 |
setTightBoundary | bool enabled | void | 设置紧密边界 |
setColorScale | QCPColorScale *colorScale | void | 设置关联色标 |
setGradient | const QCPColorGradient &gradient | void | 设置颜色渐变 |
setSelectedPen | const QPen &pen | void | 设置选中边框画笔 |
setSelectedBrush | const QBrush &brush | void | 设置选中填充画刷 |
3. 交互相关方法
| 方法 | 参数 | 返回值 | 描述 |
|---|---|---|---|
setSelectable | QCP::SelectionType selectable | void | 设置可选择类型 |
selectTest | const QPointF &pos, bool onlySelectable, QVariant *details | double | 测试点是否选中 |
四、信号
| 信号 | 参数 | 描述 |
|---|---|---|
selectionChanged | bool selected | 选中状态改变时触发 |
selectableChanged | QCP::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;}
});
七、性能优化技巧
-
数据分块处理:
cpp
// 对于大数据集,分块处理 const int blockSize = 100; for (int x=0; x<nx; x+=blockSize) {for (int y=0; y<ny; y+=blockSize) {// 处理当前块...} } -
关闭抗锯齿:
cpp
colorMap->setAntialiased(false); // 提高渲染性能 -
使用OpenGL加速:
cpp
customPlot->setOpenGl(true); // 启用OpenGL加速 -
限制重绘区域:
cpp
// 只重绘颜色图所在区域 colorMap->layer()->replot();
八、QCPColorMapData 关键方法
| 方法 | 参数 | 描述 |
|---|---|---|
setSize | int keySize, int valueSize | 设置数据矩阵大小 |
setRange | QCPRange keyRange, QCPRange valueRange | 设置数据范围 |
setKeyRange | QCPRange keyRange | 设置键轴范围 |
setValueRange | QCPRange valueRange | 设置值轴范围 |
setCell | int keyIndex, int valueIndex, double z | 设置单个单元格值 |
setData | double key, double value, double z | 通过坐标设置值 |
cellToCoord | int keyIndex, int valueIndex, double *key, double *value | 索引转坐标 |
coordToCell | double key, double value, int *keyIndex, int *valueIndex | 坐标转索引 |
QCPColorMap 是科学数据可视化的强大工具,特别适合显示二维矩阵数据,如温度分布、地形高度、概率密度等。通过合理配置,可以创建出高度定制化的热力图可视化效果。
相关文章:
色谱图QCPColorMap
一、QCPColorMap 概述 QCPColorMap 是 QCustomPlot 中用于绘制二维颜色图的类,可以将矩阵数据可视化为颜色图(热力图),支持自定义色标和插值方式。 二、主要属性 属性类型描述dataQCPColorMapData存储颜色图数据的对象interpol…...
大文件分片上传进阶版(新增md5校验、上传进度展示、并行控制,智能分片、加密上传、断点续传、自动重试),实现四位一体的网络感知型大文件传输系统
上篇文章我们总结了大文件分片上传的主要核心,但是我对md5校验和上传进度展示这块也比较感兴趣,所以在deepseek的帮助下,扩展了一下我们的代码,如果有任何问题和想法,非常欢迎大家在评论区与我交流,我需要学…...
oracle不同数据库版本的自增序列
-- 查看数据库版本 SELECT * FROM v$version WHERE banner LIKE Oracle%; 1. Oracle 12c及以上版本支持 id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY, id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) PRIMARY KEY, -- 语法 id NUMBER GENER…...
【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试
【KWDB创作者计划】_针对KWDB时序数据库(多副本集群环境)进行压力测试 1. 概述2. 压测环境部署3. 生成测试数据4. 写入性能测试5. 查询性能测试7. 总结 1. 概述 KaiwuDB分布式多模数据库从物联网场景真实需求出发,针对性设计多模架构。物联网…...
极狐GitLab 自定义实例级项目模板功能介绍
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 自定义实例级项目模板 (PREMIUM SELF) 极狐GitLab 管理员可以将群组设置为在实例上创建新项目时可选择的项目模板的来源。然…...
最新扣子(Coze)案例教程:飞书多维表格按条件筛选记录 + 读取分页Coze工作流,无限循环使用方法,手把手教学,完全免费教程
大家好,我是斜杠君。 👨💻 星球群里有同学想学习一下飞书多维表格的使用方法,关于如何通过按条件筛选飞书多维表格中的记录,以及如何使用分页解决最多一次只能读取500条的限制问题。 斜杠君今天就带大家一起搭建一…...
第八天 AI开发:NavMesh导航系统 对话系统:使用ScriptableObject存储对话数据 存档系统:JSON序列化保存数据
一、智能导航系统:NavMesh实战指南 1.1 导航网格基础配置 在Unity编辑器中: 选择场景中的静态物体勾选Navigation Static属性打开Window > AI > Navigation窗口 烘焙参数设置: NavMeshBuildSettings settings NavMesh.GetSettingsBy…...
Spring AI Alibaba-02-多轮对话记忆、持久化消息记录
Spring AI Alibaba-02-多轮对话记忆、持久化消息记录 Lison <dreamlison163.com>, v1.0.0, 2025.04.19 文章目录 Spring AI Alibaba-02-多轮对话记忆、持久化消息记录多轮对话对话持久-Redis 本次主要聚焦于多轮对话功能的实现,后续会逐步增加更多实用内容&…...
联邦元学习实现个性化物联网的框架
随着数据安全和隐私保护相关法律法规的出台,需要直接在中央服务器上收集和处理数据的集中式解决方案,对于个性化物联网而言,训练各种特定领域场景的人工智能模型已变得不切实际。基于此,中山大学,南洋理工大学…...
做虚拟化应该怎么选择美国服务器?
选择适合做虚拟化的美国服务器,需要综合考虑硬件性能、网络质量、稳定性、价格和服务支持等多个方面。以下是详细的选购指南,适合准备搭建VPS、虚拟主机、分销业务、开发测试环境、容器集群等用途的用户参考。 一、为什么美国服务器适合虚拟化? 美国机房…...
实验1 温度转换与输入输出强化
知识点:input()/print()、分支语句、字符串处理(教材2.1-2.2) 实验任务: 1. 实现摄氏温度与华氏温度互转(保留两位小数) 2. 扩展功能:输入错误处理(如非数字输入提示重新输入&#x…...
MongoDB 集合名称映射问题
项目场景 在使用 Spring Data MongoDB 进行开发时,定义了一个名为 CompetitionSignUpLog 的实体类,并创建了对应的 Repository 接口。需要明确该实体类在 MongoDB 中实际对应的集合名称是 CompetitionSignUpLog 还是 competitionSignUpLog。 问题描述 …...
【AI】SpringAI 第五弹:接入千帆大模型
1. 添加依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-qianfan</artifactId> </dependency> 2. 编写 yml 配置文件 spring:ai:qianfan:api-key: 你的api-keysecret-key: 你的secr…...
【编码规范】原生开发 与 Vue+组件库开发
原生开发 vs Vue组件库开发对比 一、原生开发常用方法 DOM操作: document.getElementById()document.querySelector()element.addEventListener()classList API操作类名 事件处理: 直接事件绑定事件委托 document.body.addEventListener(click, functi…...
[Godot] C#2D平台游戏基础移动和进阶跳跃代码
本文章给大家分享一下如何实现基本的移动和进阶的跳跃(跳跃缓冲、可变跳跃、土狼时间)以及相对应的重力代码,大家可以根据自己的需要自行修改 实现效果 场景搭建 因为Godot不像Unity,一个节点只能绑定一个脚本,所以我…...
【Unity笔记】Unity + OpenXR项目无法启动SteamVR的排查与解决全指南
图片为AI生成 一、前言 随着Unity在XR领域全面转向OpenXR标准,越来越多的开发者选择使用OpenXR来构建跨平台的VR应用。但在项目实际部署中发现:打包成的EXE程序无法正常启动SteamVR,或者SteamVR未能识别到该应用。本文将以“Unity OpenXR …...
使用 rebase 轻松管理主干分支
前言 最近遇到一个技术团队的 dev 环境分支错乱,因为是多人合作大家各自提交信息,导致出现很多交叉合并记录,让对应 log 看起来非常混乱,难以阅读。 举例说明 假设我们有一个项目,最初develop分支有 3 个提交记录&a…...
【愚公系列】《Python网络爬虫从入门到精通》063-项目实战电商数据侦探(主窗体的数据展示)
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
HttpSessionListener 的用法笔记250417
HttpSessionListener 的用法笔记250417 以下是关于 HttpSessionListener 的用法详解,涵盖核心方法、实现步骤、典型应用场景及注意事项,帮助您全面掌握会话(Session)生命周期的监听与管理: 1. 核心功能 HttpSessionLi…...
火山RTC 5 转推CDN 布局合成规则
实时音视频房间,转推CDN,文档: 转推直播--实时音视频-火山引擎 一、转推CDN 0、前提 * 在调用该接口前,你需要在[控制台](https://console.volcengine.com/rtc/workplaceRTC)开启转推直播功能。<br> * 调…...
Spark两种运行模式与部署
1. Spark 的运行模式 部署Spark集群就两种方式,单机模式与集群模式 单机模式就是为了方便开发者调试框架的运行环境。但是生产环境中,一般都是集群部署。 现在Spark目前支持的部署模式: (1)Local模式:在本地…...
react 父子组件通信 子 直接到父, 父 forwardref子
React核心概念:单向数据流(Unidirectional Data Flow) React 中数据的流动像瀑布一样,只能从上层组件(父组件)流向下层组件(子组件)。 子组件无法直接反向修改父组件的数据&#x…...
qt画一朵花
希望大家的生活都更加美好,画一朵花送给大家 效果图 void FloatingArrowPubshButton::paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing);QPen pen;pen.setColor("green");pen.setWidth(5);QBrush…...
服务器上安装maven
1.安装 下载安装包 https://maven.apache.org/download.cgi 解压安装包 cd /opt/software tar -xzvf apache-maven-3.9.9-bin.tar.gz 安装目录(/opt/maven/) mv /opt/software/apache-maven-3.9.9 /opt/ 3.权限设置 把/opt/software/apache-maven-3.9.9 文件夹重命名为ma…...
UOS+N 卡 + CUDA 环境下 X86 架构 DeepSeek 基于 vLLM 部署与 Dify 平台搭建指南
一、文档说明 本文档是一份关于 DeepSeek 在X86架构下通vLLM工具部署的操作指南,主要面向需要在UOSN卡CUDA环境中部署DeepSeek的技术人员,旨在指导文档使用者完成从 Python 环境升级、vLLM 库安装、模型部署到 Dify 平台搭建的全流程操作。 二、安装Pyt…...
MySQL终章(8)JDBC
目录 1.前言 2.正文 2.1JDBC概念 2.2三种编码方式 2.2.1第一种 2.2.2第二种(优化版) 2.2.3第三种(更优化版) 3.小结 1.前言 哈喽大家好吖,今天来给大家带来Java中的JDBC的讲解,之前学习的都是操作…...
点云数据处理开源C++方案
一、主流开源库对比 库名称特点适用场景开源协议活跃度PCL功能最全,算法丰富科研、工业级应用BSD★★★★★Open3D现代API,支持Python绑定快速开发、深度学习MIT★★★★☆CGAL计算几何算法强大网格处理、高级几何运算GPL/LGPL★★★☆☆PDAL专注于点云…...
Python 爬虫如何伪装 Referer?从随机生成到动态匹配
一、Referer 的作用与重要性 Referer 是 HTTP 请求头中的一个字段,用于标识请求的来源页面。它在网站的正常运行中扮演着重要角色,例如用于统计流量来源、防止恶意链接等。然而,对于爬虫来说,Referer 也可能成为被识别为爬虫的关…...
【MySQL】表的约束(主键、唯一键、外键等约束类型详解)、表的设计
目录 1.数据库约束 1.1 约束类型 1.2 null约束 — not null 1.3 unique — 唯一约束 1.4 default — 设置默认值 1.5 primary key — 主键约束 自增主键 自增主键的局限性:经典面试问题(进阶问题) 1.6 foreign key — 外键约束 1.7…...
基于STC89C52RC和8X8点阵屏、独立按键的小游戏《打砖块》
目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、8X8点阵屏2、独立按键3、定时器04、定时器1 四、主函数总结 系列文章目录 前言 用的是普中A2开发板,外设有:8X8LED点阵屏、独立按键。 【单片机】STC89C52RC 【频率】12T11.0592MHz 效…...
