C++ Qwt - 从向量中绘制数据

Posted

技术标签:

【中文标题】C++ Qwt - 从向量中绘制数据【英文标题】:C++ Qwt - Plotting data from a vector 【发布时间】:2013-09-05 15:45:29 【问题描述】:

我正在尝试根据我获得并存储在向量中的数据绘制图表,但是,我似乎找不到任何教程或参考资料,并给我任何关于我需要做什么的指示。所以这是我的代码:

class Plotter : public QwtPlot 



   public:

    Plotter() 

    
;



int main( int argc, char **argv )


   QApplication app(argc, argv);

   //Plotter *d_plot = new Plotter();

    Plotter* d_plot = new Plotter();

   d_plot->setTitle("DEMO");
   d_plot->setCanvasBackground(Qt::white);
   d_plot->setAxisScale( QwtPlot::yLeft, 0.1, 50.0 );
   d_plot->setAxisScale(QwtPlot::yRight, 0.1, 50.00);

   // PLOT THE DATA
   std::vector<double> data;
   data.push_back(1.03);
   data.push_back(13.12);
   //....

   d_plot->resize( 600, 400 );
   d_plot->show();


   return app.exec();

谁能告诉我我可以使用什么函数来绘制数据?

谢谢

【问题讨论】:

我现在也面临这个问题。只是想问一下,我注意到您的问题只有一个数据向量,而给出的答案由 2 个数据向量组成。另一个向量应该是什么?希望你能帮忙。谢谢(: 【参考方案1】:

查看 QwtPlot 文档:通常您创建一个 QwtPlotCurve,使用 QwtPlotCurve::setSamples 获取其中的数据,然后使用 QwtPlotCurve::attach 获取绘制的数据。

应该是这样的:

std::vector<double> x; 
std::vector<double> y; 
//fill x and y vectors
//make sure they're the same size etc
QwtPlotCurve curve( "Foo" ); 
//or use &x[ 0 ] or &(*x.first()) pre-C++11
cure.setSamples( x.data(), y.data(), (int) x.size() );
curve.attach( &plot );

http://qwt.sourceforge.net/class_qwt_plot_curve.html

http://qwt.sourceforge.net/class_qwt_plot.html

【讨论】:

感谢您的回复。你从哪里得到&amp;plot?因为,如果我在我的 o/p 中使用&amp;d_plot,它会给我一个错误:error: cannot initialize a parameter of type 'QwtPlot *' with an rvalue of type 'Plotter **' my_curve.attach(&amp;d_plot); 有什么想法吗?感谢您的帮助:) 感谢您的回复。我这样做了,现在全部编译了。但是,当我运行应用程序时,没有任何显示?我需要设置笔颜色吗?谢谢:) 顺便说一句:***.com/questions/5374287/qwt-graph-plot-example 您可以随时查看这些示例作为参考【参考方案2】:

一种方法是将曲线附加到您的绘图上,即:

QwtPlotCurve myCurve;
myCurve->attach(&d_plot);

然后您可以使用(在成员函数中,或任何您需要的地方)函数QwtPlotCurve::setRawSample,它具有以下几乎解释性的签名:

void QwtPlotCurve::setRawSample(const double* xData, const double* yData, int size);

用它设置您的数据,然后调用replot() 刷新绘图。这意味着您还必须有一个用于 x 值的向量。

代码如下所示:

int main( int argc, char **argv )

   //...
   Plotter* d_plot = new Plotter();

   //Plot config

   // PLOT THE DATA
   std::vector<double> data_y;
   data_y.push_back(1.03);
   data_y.push_back(13.12);
   std::vector<double> data_x;
   data_x.push_back(1.0);
   data_x.push_back(2.0);
   //....
   myCurve->setRawSample(data_x.data(),data_y.data(),data_y.size());
   d_plot->resize( 600, 400 );
   d_plot->replot();
   d_plot->show();
   //...

我建议你研究Qwt doc about curve

【讨论】:

以上是关于C++ Qwt - 从向量中绘制数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 QWT 和 Microsoft Visual C++ 2010 绘制 MatLab 等效图

使用 C++ 和 QWT 移动图形

使用 FFTW3/QWT 绘制频谱需要哪个框架

使用 QWT 和 FFTW 绘制频谱图

将值从向量分配给动态数组(C++)

如何使用从串口接收的数据在 Qt 中绘制图形?