qt实现功率谱和瀑布图

news2025/4/12 19:34:16

瀑布图


配置qcustomplot的例子网上有很多了,记录下通过qcustomplot实现的功率谱和瀑布图代码:

void WaveDisplay::plotWaterfall(MCustomPlot* p_imag)
{
    mCustomPlotLs = p_imag;

    mCustomPlotLs->plotLayout()->clear(); // clear default axis rect so we can start from scratch
    mCustomPlotLs->showTracer(true);
    QCPLayoutGrid *subLayoutF = new QCPLayoutGrid;
    QCPLayoutGrid *subLayoutL = new QCPLayoutGrid;

    mCustomPlotLs->setInteractions(QCP::iRangeDrag       //可平移
                                | QCP::iRangeZoom        //可滚轮缩放
                                | QCP::iSelectPlottables //可选中曲线
                                | QCP::iSelectLegend );  //可选中图例
    wideAxisRectF = new QCPAxisRect(mCustomPlotLs);
    wideAxisRectL = new QCPAxisRect(mCustomPlotLs);
    mCustomPlotLs->plotLayout()->addElement(1, 0, subLayoutF);    // insert axis rect in first row
    mCustomPlotLs->plotLayout()->addElement(0, 0, subLayoutL);    // sub layout in second row (grid layout will grow accordingly)

    QCPMarginGroup *marginGroup = new QCPMarginGroup(mCustomPlotLs);
    wideAxisRectF->setMarginGroup(QCP::msBottom, marginGroup);
    wideAxisRectL->setMarginGroup(QCP::msBottom, marginGroup);

    subLayoutF->addElement(0, 0, wideAxisRectF);
    wideAxisRectF->setupFullAxesBox(true);
    wideAxisRectF->axis(QCPAxis::atLeft)->setRange(-130, 0); // 设置轴上限和下限
    wideAxisRectF->axis(QCPAxis::atBottom)->setRange(0, 50);
    wideAxisRectF->axis(QCPAxis::atBottom)->ticker()->setTickCount(10);//10个主刻度
    wideAxisRectF->axis(QCPAxis::atBottom)->setLabel("频率(KHz)");
    wideAxisRectF->axis(QCPAxis::atLeft)->setLabel("dB");
    wideAxisRectF->axis(QCPAxis::atLeft)->setPadding(20);
    wideAxisRectF->axis(QCPAxis::atRight)->setTickLabels(true);
    wideAxisRectF->axis(QCPAxis::atRight)->setPadding(30);


    subLayoutL->addElement(0, 0, wideAxisRectL);
    wideAxisRectL->setupFullAxesBox(true);
    wideAxisRectL->axis(QCPAxis::atLeft)->setRange(0, 100);
    wideAxisRectL->axis(QCPAxis::atLeft)->setSubTicks(false);
    wideAxisRectL->axis(QCPAxis::atLeft)->setTicks(false);
    wideAxisRectL->axis(QCPAxis::atBottom)->setRange(0, 50);
    wideAxisRectL->axis(QCPAxis::atBottom)->ticker()->setTickCount(10);//10个主刻度
    wideAxisRectL->axis(QCPAxis::atBottom)->setLabel("频率(KHz)");
    wideAxisRectL->setRangeZoomFactor(0.8,1); // x轴设置缩放比例,y轴缩放比例为1,则不进行缩放


    // x轴以时间形式显示
    wideAxisRectL->addAxis(QCPAxis::atLeft)->setTickLabelColor(QColor(255,255,255)); // 左边添加一个纵轴
    QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime);
    timeTicker->setTimeFormat("%h:%m:%s");

    wideAxisRectL->axis(QCPAxis::atLeft, 1)->setTicker(timeTicker);

    connect(wideAxisRectF->axis(QCPAxis::atBottom), SIGNAL(rangeChanged(QCPRange)), wideAxisRectL->axis(QCPAxis::atBottom), SLOT(setRange(QCPRange)));
    connect(wideAxisRectL->axis(QCPAxis::atBottom), SIGNAL(rangeChanged(QCPRange)), wideAxisRectF->axis(QCPAxis::atBottom), SLOT(setRange(QCPRange)));

    // 功率谱
    mainGraphPower = mCustomPlotLs->addGraph(wideAxisRectF->axis(QCPAxis::atBottom), wideAxisRectF->axis(QCPAxis::atLeft)); // 添加图形
    mainGraphPower->rescaleKeyAxis(); // 自动调整轴范围以展示全部数据
    QPen pen;
    pen.setWidth(1);//线宽
    pen.setStyle(Qt::PenStyle::SolidLine);//虚线  solidline、dashline、dotline、dashdotline、dashdotdotline
    pen.setColor(QColor(255, 253, 85, 255));
    mainGraphPower->setPen(pen);
    mainGraphPower->setSmooth(true);  //  开启平滑曲线


    // 瀑布图
    mainGraphTime = mCustomPlotLs->addGraph(wideAxisRectL->axis(QCPAxis::atBottom), wideAxisRectL->axis(QCPAxis::atLeft, 1));
    mainGraphTime->rescaleKeyAxis();

    colorMapPower = new QCPColorMap(wideAxisRectL->axis(QCPAxis::atBottom), wideAxisRectL->axis(QCPAxis::atLeft));
    int nx = 100;
    int ny = 100;
    colorMapPower->data()->setSize(nx, ny);                            // we want the color map to have nx * ny data points
    colorMapPower->data()->setRange(QCPRange(0, 100), QCPRange(0, 100));

    QCPColorScale *colorScale = new QCPColorScale(mCustomPlotLs); // 添加色条
    subLayoutL->addElement(0, 1, colorScale);
    colorScale->axis()->setTicks(false);
    colorScale->axis()->setTickLabels(false);
    colorScale->setType(QCPAxis::atRight);            // 刻度应为垂直条,刻度线/坐标轴标签右侧(实际上,右侧已经是默认值)
    colorMapPower->setColorScale(colorScale);         // 将颜色图与色标关联
    colorScale->axis()->setLabel("信号强度");
    colorScale->axis()->setLabelColor(Qt::white);
    QCPColorGradient gradient;  // 色条使用的颜色渐变
    gradient.setColorStopAt(0.0, QColor(246,239,166));   // 设置色条开始时的颜色 QColor(246,239,166)
    gradient.setColorStopAt(1.0, QColor(191,68,76));   // 设置色条结束时的颜色

    colorMapPower->setGradient(QCPColorGradient::gpJet); // QCPColorGradient::gpJet QCPColorGradient::gpPolar
    colorMapPower->rescaleDataRange();

    mCustomPlotLs->replot(QCustomPlot::rpQueuedReplot);    // 异步重绘

}

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

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

相关文章

23种设计模式-行为型模式-责任链

文章目录 简介问题解决代码核心改进点&#xff1a; 总结 简介 责任链是一种行为设计模式&#xff0c;允许你把请求沿着处理者链进行发送。收到请求后&#xff0c;每个处理者均可对请求进行处理&#xff0c;或将其传递给链上的下个处理者。 问题 假如你正在开发一个订单系统。…

git commit Message 插件解释说明

- feat - 一项新功能 - fix - 一个错误修复 - docs - 仅文档更改 - style - 不影响代码含义的更改&#xff08;空白、格式化、缺少分号等&#xff09; - refactor - 既不修复错误也不添加功能的代码更改 - perf - 提高性能的代码更改 - build - 影响构建系统或外部依赖项…

推荐系统(二十一):基于MaskNet的商品推荐CTR模型实现

MaskNet 是微博团队 2021 年提出的 CTR 预测模型,相关论文:《MaskNet: Introducing Feature-Wise Multiplication to CTR Ranking Models by Instance-Guided Mask》。MaskNet 通过掩码自注意力机制,在推荐系统中实现了高效且鲁棒的特征交互学习,特别适用于需处理长序列及噪…

OpenCV 从入门到精通(day_04)

1. 绘制图像轮廓 1.1 什么是轮廓 轮廓是一系列相连的点组成的曲线&#xff0c;代表了物体的基本外形。相对于边缘&#xff0c;轮廓是连续的&#xff0c;边缘不一定连续&#xff0c;如下图所示。其实边缘主要是作为图像的特征使用&#xff0c;比如可以用边缘特征可以区分脸和手…

多模态学习(八):2022 TPAMI——U2Fusion: A Unified Unsupervised Image Fusion Network

论文链接&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9151265 目录 一.摘要 1.1 摘要翻译 1.2 摘要解析 二.Introduction 2.1 Introduciton翻译 2.2 Introduction 解析 三. related work 3.1 related work翻译 3.2 relate work解析 四…

JavaEE-0403学习记录

通过前期准备后&#xff0c;项目已经能够成功运行&#xff1a; 1、在文件UserMapper.java中添加如下代码&#xff1a; List<User> selectUSerByIdDynamic(User user); 2、在文件UserMapper.xml中添加如下代码&#xff1a; <select id"selectUSerByIdDynamic&quo…

图像处理:使用Numpy和OpenCV实现傅里叶和逆傅里叶变换

文章目录 1、什么是傅里叶变换及其基础理论 1.1 傅里叶变换 1.2 基础理论 2. Numpy 实现傅里叶和逆傅里叶变换 2.1 Numpy 实现傅里叶变换 2.2 实现逆傅里叶变换 2.3 高通滤波示例 3. OpenCV 实现傅里叶变换和逆傅里叶变换及低通滤波示例 3.1 OpenCV 实现傅里叶变换 3.2 实现逆傅…

RNN模型与NLP应用——(7/9)机器翻译与Seq2Seq模型

声明&#xff1a; 本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】&#xff0c;结合自身的理解所作&#xff0c;旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。 材料来源&#xff1a;【Shusenwang】的视频课程【RNN模型及NLP应用…

使用YoloV5和Mediapipe实现——上课玩手机检测(附完整源码)

目录 效果展示 应用场景举例 1. 课堂或考试监控&#xff08;看到这个学生党还会爱我吗&#xff09; 2. 驾驶安全监控&#xff08;防止开车玩手机&#xff09; 3. 企业办公管理&#xff08;防止工作时间玩手机&#xff09; 4. 监狱、戒毒所、特殊场所安保 5. 家长监管&am…

XT-912在热交换站的应用

热网监控需求 随着国民经济的不断进步和人民生活水平日益提高&#xff0c;社会对环境的要求越来越高。近年来国家大力提倡城镇集中供热&#xff0c;改变原来各单位、各片区自己供热、单独建立锅炉房给城市带来的污染&#xff0c;由城市外围的一个或者多个热源厂提供热源&#…

语文常识推翻百年“R完备、封闭”论

​语文常识推翻百年“R完备、封闭”论 黄小宁 李四光&#xff1a;迷信权威等于扼杀智慧。语文常识表明从西方传进来的数学存在重大错误&#xff1a;将无穷多各异数轴误为同一轴。 复平面z各点z的对应点zk的全体是zk平面。z面平移变换为zk&#xff08;k是非1正实常数&#xf…

基于Docker容器部署DeepSeek-R1-Distill-Qwen-7B

首先打开魔搭社区&#xff0c;然后搜索DeepSeek-R1-Distill-Qwen-7B&#xff0c;进入详情页 官方推荐使用vllm来启动&#xff0c;但是手动搭建vllm环境容易出各种问题&#xff0c;我们这里直接找一个vllm的Docker镜像 一、拉取镜像 docker pull vllm/vllm-openai 如果拉取不…

UART双向通信实现(序列机)

前言 UART&#xff08;通用异步收发传输器&#xff09;是一种串行通信协议&#xff0c;用于在电子设备之间进行数据传输。RS232是UART协议的一种常见实现标准&#xff0c;广泛应用于计算机和外围设备之间的通信。它定义了串行数据的传输格式和电气特性&#xff0c;以确…

CentOS 7 全流程部署Magic-PDF数据清洗工具(附GPU加速方案)

CentOS 7 全流程部署Magic-PDF数据清洗工具&#xff08;附GPU加速方案&#xff09; 一、环境准备与方案选型 1.1 硬件要求 配置项最低要求推荐配置CPU4核8核内存8GB16GB存储50GBSSD/NVMeGPU可选NVIDIA T4 1.2 系统环境检查 # 查看系统版本 cat /etc/redhat-release# 检查G…

LabVIEW多线程

在 LabVIEW 中&#xff0c;多线程编程是提升程序执行效率的关键手段&#xff0c;尤其是在需要并行处理数据采集、控制执行和用户界面交互的场景下。LabVIEW 本身是基于数据流&#xff08;Dataflow&#xff09;的编程语言&#xff0c;天然支持多线程&#xff0c;但要高效利用多线…

ctfshow _萌新 萌新_密码篇

萌新_密码1 先对密文进行 Hex 解码&#xff0c;得到了 S1lkZjBhM2ViZDVjNGRjMTYwLUV7ZmI2M2VlMDI5OGI4ZjRkOH0 再进行 base64 解码&#xff0c;得到了 KYdf0a3ebd5c4dc160-E{fb63ee0298b8f4d8} 再进行栅栏解码&#xff0c;得到了 flag KEY{dffb06a33eeeb0d259c84bd8cf146d08…

蓝桥杯2024省赛PythonB组——日期问题

题目链接: https://www.lanqiao.cn/problems/103/learning/?page1&first_category_id1&name%E6%97%A5%E6%9C%9F%E9%97%AE%E9%A2%98 题目内容&#xff1a; 解题思路 import os import sys# 请在此输入您的代码 from datetime import datetime date_str input().str…

带头结点 的单链表插入方法(头插法与尾插法)

带头结点的单链表插入方法&#xff08;头插法与尾插法&#xff09; 在单链表的操作中&#xff0c;插入是最常见的操作之一&#xff0c;本文介绍 带头结点的单链表 如何实现 后插法 和 前插法&#xff08;包括 插入法 和 后插数据交换法&#xff09;&#xff0c;并提供完整的 C …

Opencv之dilib库:表情识别

一、简介 在计算机视觉领域&#xff0c;表情识别是一个既有趣又具有挑战性的任务。它在人机交互、情感分析、安防监控等众多领域都有着广泛的应用前景。本文将详细介绍如何使用 Python 中的 OpenCV 库和 Dlib 库来实现一个简单的实时表情识别系统。 二、实现原理 表情识别系统…

基于web的生产过程执行管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着世界经济信息化、全球化的到来和电子商务的飞速发展&#xff0c;推动了很多行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、畅通、高效的线上管理系统。当前的生产过程执行管理存在管理效率…