qwtplot 画频谱代码

    QwtPlotSpectrogram*          m_spectrogram;
    QwtMatrixRasterData*         m_rawdata;
    QwtScaleWidget*              m_rightAxis;

    LinearColorMapRGB*           m_colorMap;
class LinearColorMapRGB : public QwtLinearColorMap
{
public:
        LinearColorMapRGB() :
                QwtLinearColorMap(Qt::darkCyan, Qt::red, QwtColorMap::RGB)
        {
                addColorStop(0.1,  Qt::cyan);
                addColorStop(0.6,  Qt::green);
                addColorStop(0.95, Qt::yellow);

        }
};



void MainWindow::InitPlotGram( QwtPlot* Plot)
{
    //设置线程数和缓存,影响不大
    if(m_spectrogram==NULL)
    {
        m_spectrogram = new QwtPlotSpectrogram();
        m_spectrogram->setRenderThreadCount(0);
        m_spectrogram->setCachePolicy(QwtPlotRasterItem::PaintCache);
        m_spectrogram->attach(ui->qwtPlot_Wave4);
    }
   //设置右边颜色柱
    if(m_rightAxis==NULL)
    {
        m_rightAxis = Plot->axisWidget( QwtPlot::yRight );
        m_rightAxis->setColorBarEnabled( true );
        m_rightAxis->setColorBarWidth( 20 );
        //m_rightAxis->setTitle("幅值");
    }

   //m_rightAxis->setColorMap(QwtInterval( 0, 22 ), new LinearColorMapRGB());

   //设置坐标轴的名称
   Plot->setTitle("RD");
   Plot->setAxisTitle(QwtPlot::xBottom, "距离(m)");
   Plot->setAxisTitle(QwtPlot::yLeft, "多普勒(Hz)");
   //设置坐标轴的范围
//   ui->qwtPlot_Wave2->setAxisScale(QwtPlot::yLeft, 0, 9690);//x坐标最大值
//   ui->qwtPlot_Wave2->setAxisScale(QwtPlot::xBottom, 0, 500);//y坐标最大值
//   ui->qwtPlot_Wave2->setAxisScale(QwtPlot::yRight, 0, 22);//z坐标最大值

   Plot->enableAxis(QwtPlot::yRight);
   //设置画布对齐到所有坐标轴
   Plot->plotLayout()->setAlignCanvasToScales(true);

   if(m_rawdata==NULL)
   {
       m_rawdata  =  new QwtMatrixRasterData;

       m_rawdata->setResampleMode(QwtMatrixRasterData::BilinearInterpolation);
   }
   m_colorMap = new LinearColorMapRGB();
//   m_rawdata->setInterval( Qt::XAxis, QwtInterval( 0, 500) );
//   m_rawdata->setInterval( Qt::YAxis, QwtInterval( 0, 9690 ) );
//   m_rawdata->setInterval( Qt::ZAxis, QwtInterval( 0, 22 ) );

}


void MainWindow::HandleMtalabSDataContent(QVector<double> waveData,quint16 cloumn,quint32 maxZ,quint16 x)
{
    //int nPos      = 1/m_globePRT.toUInt()*1000;
    //qDebug()<<"HandleMtalabSDataContent"<<m_globePRF.toUInt()/2;
    //double yRange = (double)m_globePRF.toUInt()/2;
    double yRange = 10;
    ui->qwtPlot_Wave6->setAxisScale(QwtPlot::yLeft, -yRange, yRange);//x坐标最大值
    ui->qwtPlot_Wave6->setAxisScale(QwtPlot::xBottom, 0, cloumn);//y坐标最大值
    ui->qwtPlot_Wave6->setAxisScale(QwtPlot::yRight, 0, maxZ);//z坐标最大值
    ui->qwtPlot_Wave6->plotLayout()->setAlignCanvasToScales(true);


    m_rightAxis2->setColorMap(QwtInterval( 0, maxZ ),m_colorMap);
    m_rawdata2->setResampleMode(QwtMatrixRasterData::NearestNeighbour);//插值方法
//    m_rawdata->setInterval( Qt::XAxis, QwtInterval( 0, m_globeCPN*0.1) );
//    m_rawdata->setInterval( Qt::YAxis, QwtInterval( 0, m_globeN*0.1 ) );
//    m_rawdata->setInterval( Qt::ZAxis, QwtInterval( 0, m_globalMaxZ ) );
    m_rawdata2->setInterval( Qt::XAxis, QwtInterval( 0, cloumn) );
    m_rawdata2->setInterval( Qt::YAxis, QwtInterval( -yRange, yRange ) );
    m_rawdata2->setInterval( Qt::ZAxis, QwtInterval( 0, maxZ ) );
    //设置轮廓线的数量和层次(当值为多少时画一条轮廓线)
    QList<double> contourLevels;
    for(int i = 0; i <= maxZ; i = i + 1)
    {
        contourLevels.append(i);
    }
    //qDebug()<<"m_globalMaxZ"<<m_globalMaxZ<<m_globeCPN*0.1<<m_globeN*0.1;
    m_spectrogram2->setContourLevels( contourLevels );
    m_rawdata2->setValueMatrix(waveData, cloumn );

    m_spectrogram2->setData(m_rawdata2);
    m_spectrogram2->setDisplayMode(QwtPlotSpectrogram::ContourMode, true);
    m_spectrogram2->setDisplayMode( QwtPlotSpectrogram::DisplayMode::ImageMode, true );
    m_spectrogram2->setDefaultContourPen(Qt::transparent, 1);
    m_spectrogram2->setColorMap(m_colorMap2/*new LinearColorMapRGB()*/);

    ui->qwtPlot_Wave6->replot();
    //qDebug()<<"HandleMtalabTDataContent";
}

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值