【问题标题】:How to configure gnuplot-iostream with C++?如何使用 C++ 配置 gnuplot-iostream?
【发布时间】:2014-02-27 03:16:35
【问题描述】:

总的来说,我是 gnuplot 和 linux 的菜鸟。我需要为我将使用 C++ 的项目绘制科学图表。在寻找各种可用的绘图选项后,我决定使用 gnuplot 进行绘图,因为它具有图形的功能和质量。所以我下载了 gnuplot 作为一个程序,并且可以使用 .dat 文件绘制图形,但是我需要在 C++ 中绘制图形而不显式启动 gnuplot。是否可以使用 gnuplot 绘制动态图?我还想绘制为每个时间步计算的解决方案!

我了解到 gnuplot-iostream 接口使这成为可能。但是我根本不明白如何为 C++ 安装这个库。我不了解 Git 或网站上发布的任何内容,以便能够配置该库。谁能指出我的教程/如何记录相同的内容?我有 Ubuntu 12.04 和 Windows 8.1。

是否可以使用 IDE 配置此库(我正在使用 code::blocks),如果可以,如何实现?

【问题讨论】:

    标签: c++ gnuplot


    【解决方案1】:

    首先 gnuplot-iostream 依赖于 Boost 库,它是一个很常见的库,但它没有与 C++ 编译器一起提供,所以请确保它已正确安装。

    显然它还需要 gnuplot:如果安装正确,您应该能够从终端启动它。

    然后将这个最小示例粘贴到文件 main.cpp 中:

    #include <vector>
    #include <utility>
    #include "gnuplot-iostream.h"
    
    int main() {
      std::vector<std::pair<double,double>> data;
      data.emplace_back(-2,-0.8);
      data.emplace_back(-1,-0.4);
      data.emplace_back(0,-0);
      data.emplace_back(1,0.4);
      data.emplace_back(1,0.8);
    
      Gnuplot gp;
      gp << "plot [-5:5] sin(x) tit 'sin(x)', '-' tit 'data'\n";
      gp.send1d(data);
      return 0;
    }
    

    将标题gnuplot-iostream.h保存在同一文件夹中并编译:

    g++ -std=c++11 main.cpp -o main -lboost_iostreams -lboost_system -lboost_filesystem
    

    运行./main 时,您应该得到正弦函数和几个点的图。

    【讨论】:

      【解决方案2】:

      最近我正在使用 Gnuplot 来可视化来自迭代求解器的数据。为了以“伪”实时运行 Gnuplot,我执行了以下步骤:

      • 建立从 C++ 到 Gnuplot 的管道:

        文件 *GnuPipe = popen("...\bin\pgnuplot -persist","w");

      • 启动求解器(或数据源)并写入文件,例如'data.txt'

      • 启动一个脚本,告诉 Gnuplot 重新绘制 data.txt,只要未设置标志。在这种情况下,我创建了一个文本文件“flag.txt”并写入 a=0,用作标志。 Gnuplot 的脚本可能如下所示:

        load 'flag.txt'
        plot 'data.txt' u 1:2 with lines
        pause 0.1
        if (a==0) reread
        
      • 如果求解器收敛,或者没有更多数据可绘制,请在“flag.txt”中设置 a=1
      • Gnuplot 正在加载“flag.txt”并看到该标志已设置并停止重新读取。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多