我刚刚遇到了Dan Stahlke的gnuplot C++ I/O接口(interface),这使我免于“自己动手”。不幸的是,这里没有太多示例,也没有ios的真实文档。我的C++项目中有以下数据类型:struct Data{ std::string datestr; // x axis value float f1; // y axis series 1 float f2; // y axis series 2 float f3; // y axis series 3};typedef std::vector<Data> Dataset;我想从C++传递一个Dataset变量,以便可以绘制数据(X轴上的日期,Y轴上的3个数字作为时间序列)。谁能告诉我如何将Dataset变量从C++传输到gnuplot(使用Gnuplot-iostream接口(interface))并使用传入的数据进行简单绘图? 最佳答案 我最近将新版本推送到git,这使得支持这样的自定义数据类型变得容易。为了支持struct Data,可以提供TextSender类的特殊化。这是使用您定义的结构的完整示例。#include #include“gnuplot-iostream.h”结构数据{ std::string datestr;//x轴值 float f1;//y轴系列1 float f2;//y轴系列2 float f3;//y轴系列3};typedef std::vector 数据集;命名空间gnuplotio { 模板 struct TextSender { 静态无效send(std::ostream&stream,const Data&v){ TextSender ::send(stream,v.datestr); 流 TextSender ::send(stream,v.f1); 流 TextSender ::send(stream,v.f2); 流 TextSender ::send(stream,v.f3); //这也可以,但是上面的较长版本提供了 //gnuplot-iostream有机会格式化数字本身(例如 //使用与平台无关的“nan”字符串)。 //stream } };}int main(){ 数据集x(2); //http://www.gnuplot.info/demo/timedat.html示例在 //日期和时间,但这似乎不起作用(gnuplot将其解释为 //两列)。所以我用逗号。 x [0] .datestr =“01/02/2003,12:34”; x [0] .f1 = 1; x [0] .f2 = 2; x [0] .f3 = 3; x [1] .datestr =“02/04/2003,07:11”; x [1] .f1 = 10; x [1] .f2 = 20; x [1] .f3 = 30; Gnuplot gp; gp gp gp gp.send1d(x); 返回0;}可以做类似的事情来支持以二进制格式发送数据。有关示例,请参见git repo中的example-data-1d.cc。另外,可以通过重写operator<<(std::ostream &, ...)来支持这样的自定义数据类型。另一种选择是使用std::tuple(在C++ 11中可用)或boost::tuple而不是定义您自己的结构。这些都是开箱即用的(嗯,现在已经支持了,在您提出问题时还没有)。关于c++ - 将数据从C++传递到gnuplot示例(使用Gnuplot-iostream接口(interface)),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4705435/ 10-14 06:36