色谱图QCPColorMap

news2025/4/24 7:44:30

一、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 是科学数据可视化的强大工具,特别适合显示二维矩阵数据,如温度分布、地形高度、概率密度等。通过合理配置,可以创建出高度定制化的热力图可视化效果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新扣子(Coze)案例教程:飞书多维表格按条件筛选记录 + 读取分页Coze工作流,无限循环使用方法,手把手教学,完全免费教程

大家好&#xff0c;我是斜杠君。 &#x1f468;‍&#x1f4bb; 星球群里有同学想学习一下飞书多维表格的使用方法&#xff0c;关于如何通过按条件筛选飞书多维表格中的记录&#xff0c;以及如何使用分页解决最多一次只能读取500条的限制问题。 斜杠君今天就带大家一起搭建一…

Spring AI Alibaba-02-多轮对话记忆、持久化消息记录

Spring AI Alibaba-02-多轮对话记忆、持久化消息记录 Lison <dreamlison163.com>, v1.0.0, 2025.04.19 文章目录 Spring AI Alibaba-02-多轮对话记忆、持久化消息记录多轮对话对话持久-Redis 本次主要聚焦于多轮对话功能的实现&#xff0c;后续会逐步增加更多实用内容&…

联邦元学习实现个性化物联网的框架

随着数据安全和隐私保护相关法律法规的出台&#xff0c;需要直接在中央服务器上收集和处理数据的集中式解决方案&#xff0c;对于个性化物联网而言&#xff0c;训练各种特定领域场景的人工智能模型已变得不切实际。基于此&#xff0c;中山大学&#xff0c;南洋理工大学&#xf…

实验1 温度转换与输入输出强化

知识点&#xff1a;input()/print()、分支语句、字符串处理&#xff08;教材2.1-2.2&#xff09; 实验任务&#xff1a; 1. 实现摄氏温度与华氏温度互转&#xff08;保留两位小数&#xff09; 2. 扩展功能&#xff1a;输入错误处理&#xff08;如非数字输入提示重新输入&#x…

【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…

[Godot] C#2D平台游戏基础移动和进阶跳跃代码

本文章给大家分享一下如何实现基本的移动和进阶的跳跃&#xff08;跳跃缓冲、可变跳跃、土狼时间&#xff09;以及相对应的重力代码&#xff0c;大家可以根据自己的需要自行修改 实现效果 场景搭建 因为Godot不像Unity&#xff0c;一个节点只能绑定一个脚本&#xff0c;所以我…

【Unity笔记】Unity + OpenXR项目无法启动SteamVR的排查与解决全指南

图片为AI生成 一、前言 随着Unity在XR领域全面转向OpenXR标准&#xff0c;越来越多的开发者选择使用OpenXR来构建跨平台的VR应用。但在项目实际部署中发现&#xff1a;打包成的EXE程序无法正常启动SteamVR&#xff0c;或者SteamVR未能识别到该应用。本文将以“Unity OpenXR …

使用 rebase 轻松管理主干分支

前言 最近遇到一个技术团队的 dev 环境分支错乱&#xff0c;因为是多人合作大家各自提交信息&#xff0c;导致出现很多交叉合并记录&#xff0c;让对应 log 看起来非常混乱&#xff0c;难以阅读。 举例说明 假设我们有一个项目&#xff0c;最初develop分支有 3 个提交记录&a…

【愚公系列】《Python网络爬虫从入门到精通》063-项目实战电商数据侦探(主窗体的数据展示)

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…

HttpSessionListener 的用法笔记250417

HttpSessionListener 的用法笔记250417 以下是关于 HttpSessionListener 的用法详解&#xff0c;涵盖核心方法、实现步骤、典型应用场景及注意事项&#xff0c;帮助您全面掌握会话&#xff08;Session&#xff09;生命周期的监听与管理&#xff1a; 1. 核心功能 HttpSessionLi…

火山RTC 5 转推CDN 布局合成规则

实时音视频房间&#xff0c;转推CDN&#xff0c;文档&#xff1a; 转推直播--实时音视频-火山引擎 一、转推CDN 0、前提 * 在调用该接口前&#xff0c;你需要在[控制台](https://console.volcengine.com/rtc/workplaceRTC)开启转推直播功能。<br> * 调…

Spark两种运行模式与部署

1. Spark 的运行模式 部署Spark集群就两种方式&#xff0c;单机模式与集群模式 单机模式就是为了方便开发者调试框架的运行环境。但是生产环境中&#xff0c;一般都是集群部署。 现在Spark目前支持的部署模式&#xff1a; &#xff08;1&#xff09;Local模式&#xff1a;在本地…

qt画一朵花

希望大家的生活都更加美好&#xff0c;画一朵花送给大家 效果图 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工具部署的操作指南&#xff0c;主要面向需要在UOSN卡CUDA环境中部署DeepSeek的技术人员&#xff0c;旨在指导文档使用者完成从 Python 环境升级、vLLM 库安装、模型部署到 Dify 平台搭建的全流程操作。 二、安装Pyt…

MySQL终章(8)JDBC

目录 1.前言 2.正文 2.1JDBC概念 2.2三种编码方式 2.2.1第一种 2.2.2第二种&#xff08;优化版&#xff09; 2.2.3第三种&#xff08;更优化版&#xff09; 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来给大家带来Java中的JDBC的讲解&#xff0c;之前学习的都是操作…

Python 爬虫如何伪装 Referer?从随机生成到动态匹配

一、Referer 的作用与重要性 Referer 是 HTTP 请求头中的一个字段&#xff0c;用于标识请求的来源页面。它在网站的正常运行中扮演着重要角色&#xff0c;例如用于统计流量来源、防止恶意链接等。然而&#xff0c;对于爬虫来说&#xff0c;Referer 也可能成为被识别为爬虫的关…

【MySQL】表的约束(主键、唯一键、外键等约束类型详解)、表的设计

目录 1.数据库约束 1.1 约束类型 1.2 null约束 — not null 1.3 unique — 唯一约束 1.4 default — 设置默认值 1.5 primary key — 主键约束 自增主键 自增主键的局限性&#xff1a;经典面试问题&#xff08;进阶问题&#xff09; 1.6 foreign key — 外键约束 1.7…

基于STC89C52RC和8X8点阵屏、独立按键的小游戏《打砖块》

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、8X8点阵屏2、独立按键3、定时器04、定时器1 四、主函数总结 系列文章目录 前言 用的是普中A2开发板&#xff0c;外设有&#xff1a;8X8LED点阵屏、独立按键。 【单片机】STC89C52RC 【频率】12T11.0592MHz 效…

数字电子技术基础(五十)——硬件描述语言简介

目录 1 硬件描述语言简介 1.1 硬件描述语言简介 1.2 硬件编程语言的发展历史 1.3 两种硬件描述的比较 1.4 硬件描述语言的应用场景 1.5 基本程序结构 1.5.1 基本程序结构 1.5.2 基本语句和描述方法 1.5.3 仿真 1 硬件描述语言简介 1.1 硬件描述语言简介 硬件描述语…