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

c++ opencv plot computer-vision

4803 观看

5回复

1841 作者的声誉

我正在寻找类似的东西:

 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图表中使用了这些东西。我只想要一个愚蠢的贫民窟,情节出现。这是为了进行粗略的调试检查,例如“矢量甚至在变化吗?当我移动相机时,它是否会突然出现抖动?” 等等。

作者: peter karasev 的来源 发布者: 2011 年 6 月 21 日

回应 (5)


3

3429 作者的声誉

这个帖子似乎对此事有很多建议。我没有看到任何像你想要的目的那样突出的简单库。

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

koolplot

GOBLIN

作者: dolphy 发布者: 21.06.2011 04:50

6

11796 作者的声誉

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

所以像

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

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

gnuplot
plot "myfile" with lines
作者: jk. 发布者: 21.06.2011 04:56

-1

6819 作者的声誉

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

作者: Vinicius Kamakura 发布者: 21.06.2011 05:01

2

767 作者的声誉

您可以使用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
作者: abalakin 发布者: 16.07.2011 09:20

0

751 作者的声誉

使用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
作者: R.Falque 发布者: 10.07.2019 11:51
32x32