什么是*绘制* std :: vector <double>?</double>的简单/最简单的方法

时间:2011-06-21 16:40:38

标签: c++ opencv plot computer-vision

我正在寻找类似的东西:

 std::vector<double> X = some_math_function( );
 somenamespace :: plot(  Wrapper( X ) ); // pop-up and display a graph of X on y-axis, 1 to X.size() on x-axis. 

显然有更重量级的方法,比如设置gnu-plot或者其他什么,我已经在VTK图表中使用了这些东西。我只想要一个愚蠢的贫民窟,情节出现。这是为了进行粗略的调试检查,例如“矢量甚至在变化吗?当我移动相机时,它是否会突然出现抖动?”等等。

5 个答案:

答案 0 :(得分:6)

如果这是为了调试,为什么不将矢量输出到分隔文件并在excel或gnuplot中绘图或作为单独的步骤?

类似

//untested
ofstream myfilestream("myfile");
std::copy(X.begin(), X.end(), std::ostream_iterator<double>(myfilestream, '\n');

然后只需将文件绘制在您喜欢的工具中,例如

gnuplot
plot "myfile" with lines

答案 1 :(得分:3)

This thread似乎对此事提出了不少建议。我没有看到任何像你想要的目的那样突出的简单库。

以下是一些轻量级示例,但在我看来,如果您需要学习足够的知识来支持任何库,您也可以像gnuplot那样站出来受人尊敬。在许多情况下,你不得不处理一个更复杂的图书馆而失去的时间不仅仅是社区支持和(相对)无懈可击......更成熟的产品所弥补的。

koolplot

GOBLIN

答案 2 :(得分:2)

您可以使用MathGL(跨平台GPL绘图库)。代码看起来像

mglGraphZB gr;// create canvas
mglData d; d.Set(X);  // convert to internal format
gr.YRange(d); // set range for y-axis
gr.Plot(d);   // plot it
gr.Axis();    // draw axis if you need
gr.WritePNG("1.png"); // save it

答案 3 :(得分:0)

使用C ++ 11:我建议使用matplotlibcpp,它使用python进行绘图。该库非常易于使用,您只需要在存储库中复制头文件即可。

代码如下:

#include "matplotlibcpp.h"
#include <vector>
#include <algorithm> // for std::iota

int main()
{
  std::vector <double> y = {0.1, 0.2, 0.4, 0.8, 1.6};
  std::vector <int> x(y.size());
  std::iota(x.begin(), x.end(), 0);

  matplotlibcpp::plot(x, y);
  matplotlibcpp::show();
  plt::save("plot.png");
}

在您的cmake中:

find_package(PythonLibs 2.7)
target_include_directories(myproject PRIVATE ${PYTHON_INCLUDE_DIRS})
target_link_libraries(myproject ${PYTHON_LIBRARIES})

或将其直接传递给编译器:

g++ main.cpp -std=c++11 -I/usr/include/python2.7 -lpython2.7

答案 4 :(得分:-1)

我记得很容易在php中使用gd绘制曲线,但这是很久以前的事了。