关于问题详细描述可以看一下我之前的博文,之前我只是简单的介绍了一下这个功能,现在介绍一下如何具体x实现

https://blog.csdn.net/qq_21449473/article/details/103207224

一、使用工具

QT+QCustomplot结合,利用QCustmPlot中的QCPColorMap功能

二、 实现步骤

第一步骤:初始化图纸

/**********************************************************************************Author:  zyh*Version: 1.0 //版本*Date: 2020-01-08 //完成日期*Description: 主要实现设置第二张图纸//用于主要说明此程序文件完成的主要功能无输入值以及返回值 //与其他模块或函数的接口、输出值、取值范围、无/含义及参数间的控制、顺序、独立及依赖关系
**********************************************************************************/
void MainWindow::SetTwoGraph()  //设置第二张图纸
{fp3 = ui->widget_lofar; //创建一个画图指针fp3->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom| QCP::iSelectPlottables);//可拖拽+可滚轮缩放//  QSharedPointer<QCPAxisTickerDateTime> dateTicker(new QCPAxisTickerDateTime);//日期做X轴// dateTicker->setDateTimeFormat("hh:mm:ss");//日期格式(可参考QDateTime::fromString()函数)//fp3->xAxis->setTicker(dateTicker);//设置X轴为时间轴//fp3->xAxis->setTicker();fp3->xAxis->setLabel("时间/S");//x轴显示文字fp3->yAxis->setLabel("频率/Hz(单位:*10^4)");//y轴显示文字fp3->xAxis->setRange(0,50);//当前X轴显示范围fp3->yAxis->setRange(0,4.9);//当前y轴显示范围//每条曲线都会独占一个graph()fp3->addGraph();fp3->graph(0)->setPen(QPen(Qt::blue));//曲线颜色fp3->graph(0)->setBrush(QBrush(QColor(0,255,255,20)));//曲线与X轴包围区的颜色//自动调整XY轴的范围,以便显示出graph(0)中所有的点//给第一个graph设置rescaleAxes(),后续所有graph都设置rescaleAxes(true)即可实现显示所有曲线/* fp3->graph(0)->rescaleAxes();*///通过传递的轴的QCustomPlot进行注册,简洁理解QCPColorMap的数据为(x轴,y轴;颜色,值value)m_pColorMap = new QCPColorMap(fp3->xAxis,fp3->yAxis);m_pColorMap->data()->setSize(51,4096);//设置整个图(x,y)点数,X轴50个点,y轴4096个点m_pColorMap->data()->setRange(QCPRange(0,50),QCPRange(0,4.9));//setRange是设置X轴以及Y轴的范围//  for(int x=0;x<=100;x++)
//  {
//    for(int y=0;y<4096;y++)
//    {
//        m_pColorMap->data()->setCell(x,y,qCos(x/10.0)+qSin(y/10.0));
//    }
//  }m_pColorMap->setGradient(QCPColorGradient::gpCold);//设置默认渐进色变化(可在QCPColorGradient中查看)m_pColorMap->rescaleDataRange(true);// dataTimer =new QTimer;//connect(dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot()));//dataTimer->start(0); // Interval 0 means to refresh as fast as possible
// 立即刷新图像fp3->rescaleAxes();//自适应大小ui->widget_lofar->replot();
}

注意以下这一句很重要,是设置整个谱图的大小,,而且注意最好多留出来一个空位置,如果你需要填写50*100个点,那么你图纸大小最好设置51*101,不然可能会超出容量报错

m_pColorMap->data()->setSize(51,4096);//设置整个图(x,y)点数,X轴50个点,y轴4096个点

第二步:定义个二维数组缓存数据

我是定义在.h文件中

注意,这个二维数组第一纬度的链表,应为在后面我需要一直在前面插入新的一竖行数据,用链表插入比较快,我一开始用的二维全部都是QVector类型,这样的话每次插入都要大量运算,耗费时间,注意第二纬度数组最好是QVector类型,应为第二纬度是一个竖行数据,最好的连续的,这样写入会快很多,所以就定义了如下的二维数据来存储数据,节省大量时间,运算速度快很多

 QList<QVector<double> > value_lofar;   //二维数组,第一维列表类型,第二维度Vector容器类存double类型数据,由于lofar是第一维度的添加QList,添加不耗时间,第二维度连续的存储Vector比较好

第三部:存储数据

以下是数据存储以及显示部分代码,我新来一行数据,就插入到之前二维数组前面,当插入超过49以后,删除最后一竖行数据,防止数据溢出出现问题,,然后通过一个二维for循环,利用setCell函数,把数据显示在图纸上,注意最后需要刷新一下才会显示,最终实现效果如上面所示

void MainWindow::show_Lofar()   //显示lofar瀑布图
{thread_GetData->lofar_chan1_y.resize(thread_GetData->freqDomain_Size/2);  //取fft中一半的数据显示即可thread_GetData->lofar_chan2_y.resize(thread_GetData->freqDomain_Size/2);if(value_lofar.size()>49){value_lofar.removeLast();  //当lofar累积到了50个,删除最后面的数据,防止绘图溢出绘图区域}value_lofar.prepend(thread_GetData->lofar_chan1_y);//新来的数据一直往前面累加//要注意i代表X轴,j代表y轴(x,y)的点的数据,显示瀑布图//再把刚刚lofar数据0-98行,存到1-99行中空出第0行for (int i=0;i<value_lofar.size();i++){for(int j=0;j<4096;j++){m_pColorMap->data()->setCell(i,j,qRound(value_lofar[i][j]));}}//   m_pColorMap->setGradient(QCPColorGradient::gpJet);//设置默认渐进色变化(可在QCPColorGradient中查看)m_pColorMap->rescaleDataRange(true);// 立即刷新图像//fp3->graph(0)->setData();fp3->rescaleAxes();//自适应大小ui->widget_lofar->replot();//qDebug() << "帧数:"<< zhen ;  //调试用
}

最后提醒一下,大家一定要注意,这个setCells第三个参数虽然是double类型,但是实际我使用时候用double类型数据根本没用没法显示显示,只能显示整数,所以我加了qRound函数,把数据取整数,这样才能显示!!!!可能手册写错了,或者我用的不对,欢迎有知道的交流下。

  m_pColorMap->data()->setCell(i,j,qRound(value_lofar[i][j]));

以下是关于切换颜色变化部分的代码

/**********************************************************************************Author:  zyh*Version: 1.0 //版本*Date: 2020-01-31 //完成日期*Description: 主要实现通过选择实现lofar谱的颜色变化    //用于主要说明此程序文件完成的主要功能无输入值以及返回值                    //与其他模块或函数的接口、输出值、取值范围、无                                //含义及参数间的控制、顺序、独立及依赖关系
**********************************************************************************/
void MainWindow::on_Box_ColorMap_currentTextChanged(const QString &arg1)
{if(ui->Box_ColorMap->currentText()=="gpGrayscale"){m_pColorMap->setGradient(QCPColorGradient::gpGrayscale);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpHot"){m_pColorMap->setGradient(QCPColorGradient::gpHot);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpCold"){m_pColorMap->setGradient(QCPColorGradient::gpCold);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpNight"){m_pColorMap->setGradient(QCPColorGradient::gpNight);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpCandy"){m_pColorMap->setGradient(QCPColorGradient::gpCandy);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpGeography"){m_pColorMap->setGradient(QCPColorGradient::gpGeography);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpIon"){m_pColorMap->setGradient(QCPColorGradient::gpIon);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpThermal"){m_pColorMap->setGradient(QCPColorGradient::gpThermal);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpPolar"){m_pColorMap->setGradient(QCPColorGradient::gpPolar);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpSpectrum"){m_pColorMap->setGradient(QCPColorGradient::gpSpectrum);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpJet"){m_pColorMap->setGradient(QCPColorGradient::gpJet);//设置默认渐进色变化(可在QCPColorGradient中查看)}else if (ui->Box_ColorMap->currentText()=="gpHues"){m_pColorMap->setGradient(QCPColorGradient::gpHues);//设置默认渐进色变化(可在QCPColorGradient中查看)}
}

比较简单,具体可以看手册

关于使用的demo:https://download.csdn.net/download/qq_21449473/15762423

利用QT实现瀑布图、Lofar谱图、色谱图,热力图(二)相关推荐

  1. 【数字信号】基于matlab GUI DTMF电话模拟系统(频谱图+时域图+语谱图)【含Matlab源码 2092期】

    ⛄一.DTMF简介 1 含义 双音多频 DTMF(Dual Tone Multi Frequency),双音多频,由高频群和低频群组成,高低频群各包含4个频率.一个高频信号和一个低频信号叠加组成一个组 ...

  2. 获取音频的时域频谱-振幅图-音频可视化-音量图-音谱图

    找了很久的资料,基本都是音频的实时频谱图,即通过MediaPlayer-Visualizer-onWaveFormDataCapture.onFftDataCapture获取数据,然后解析.绘制出来的 ...

  3. eds能谱图分析实例_【材料学堂】X射线光电子能谱(XPS)谱图分析

    一.X光电子能谱分析的基本原理 X光电子能谱分析的基本原理:一定能量的X光照射到样品表面,和待测物质发生作用,可以使待测物质原子中的电子脱离原子成为自由电子.该过程可用下式表示: hn=Ek+Eb+E ...

  4. eds能谱图分析实例_X射线光电子能谱(XPS)谱图分析

    一.X光电子能谱分析的基本原理 X光电子能谱分析的基本原理:一定能量的X光照射到样品表面,和待测物质发生作用,可以使待测物质原子中的电子脱离原子成为自由电子.该过程可用下式表示: hn=Ek+Eb+E ...

  5. eds能谱图分析实例_一文带你全面了解X射线光电子能谱(XPS)谱图分析

    一.X光电子能谱分析的基本原理 X光电子能谱分析的基本原理:一定能量的X光照射到样品表面,和待测物质发生作用,可以使待测物质原子中的电子脱离原子成为自由电子.该过程可用下式表示: hn=Ek+Eb+E ...

  6. 语谱图的实现与种类,与画图

    1. 语谱图的矩阵 1.1 原始矩阵 首先原始矩阵,从上到下,依次为第0 行, 到最后一行: 1.2 语谱图矩阵 最终生成的语谱图矩阵数据, 从上到下,第0 行代表低频,最后一行代表高频: 1.3 矩 ...

  7. 语音信号处理-概念(一):时域信号(横轴:时间;纵轴:幅值)、频谱图(横轴:频率;纵轴:幅值)--傅里叶变换-->时频谱图(语谱图/声谱图)【横轴:时间;纵轴:频率;颜色深浅:幅值】

    我们经常接触到与频谱相关的概念.本节对这些概念之间的区别进行简单的介绍. 一般来讲,将一段时域信号通过离散傅里叶变换后,将频率作为横轴.幅度作为纵轴,得到的图像称作 频谱.若将相位作为纵轴,则称为 相 ...

  8. 不调包绘制音频语谱图并批量生成语谱图

    什么是语谱图 语谱图(Spectrogam)是表示语音频谱随时间变化的图形,其实是一个二维的图像,但却能表示三个维度的信息,横坐标表示时间,纵坐标表示频率,颜色的深浅来映射能量的大小.任一给定频率成分 ...

  9. QT 绘制波形图、频谱图、瀑布图、星座图、眼图、语图

    说明 最近在学中频信号处理的一些东西,顺便用 QT 写了一个小工具,可以显示信号的时域波形图.幅度谱.功率谱.二次方谱.四次方谱.八次方谱.瞬时包络.瞬时频率.瞬时相位.非线性瞬时相位.瞬时幅度直方图 ...

最新文章

  1. 个人技术生涯的感悟(2)
  2. 安谋中国推出“山海” S12,AIoT 安全解决方案技术全解读
  3. 数据库水平切分(MyCat分片Join)
  4. android 布局 站位符,基于android布局中的常用占位符介绍
  5. mongodb update
  6. cpu飙升 死循环_java排查一个线上死循环cpu暴涨的过程分析
  7. 如何比较对比两张图片差异(判断是不是同一张)== all
  8. php项目技术选型方案,php-现有资源下,项目技术选型求助
  9. python meataclass详解
  10. 2020年11月全国程序员工资,新出炉!
  11. Sql Server中实现Mysql中的group_concat函数效果
  12. .net数据绑定控件中的数据导出到Excel
  13. 通过自己的项目实际经验,阐述为什么“恶心玩技术”?玩Java开源B/S的教训(三)...
  14. 毕业设计(三)---spring学习笔记(1)之-IOC
  15. bes2300 tws配对_如何评价恒玄科技BES2300蓝牙芯片?
  16. iOS10推送适配完整说明
  17. jQuery插件实例二:年华时代插件ReturnTop回到首页
  18. 下个一个语音,计算机.,中国计算机产业的下一个亮点——汉语语音合成的实用化...
  19. 安装卸载Windows服务
  20. linux roundup函数记录

热门文章

  1. dnf跨四服务器什么时候修复,DNF:跨四大区服务器炸了,数据回档导致多少玩家错过了毕业装备...
  2. 破解校园网锐捷4.44多网卡拨号限制
  3. 计算机excel2010操作题,计算机应用基础Excel2010综合测试操作步骤参考自测题步骤...
  4. 208核、6TB内存,阿里云发布全球最强云服务器:挑战摩尔定律极限
  5. Python处理Excel表格匹配问题
  6. org.activiti.engine.ActivitiException: couldn‘t resolve duedate问题的一个解决
  7. java中间常用的类_Java实现的中间库 | 学步园
  8. 国外存储器专利筑起高墙?大陆半导体怎么破
  9. 详细讲解 “双评价”——建设指向的土地资源评价
  10. linux 文件 dos unix格式,如何查看文件是dos格式还是unix格式的?