【问题标题】:gnuplot output generating png C++ Xcodegnuplot 输出生成 png C++ Xcode
【发布时间】:2016-06-25 21:26:31
【问题描述】:

我想在使用 gnuplot 的 c++ 应用程序中打印一些数据。关键是我想要一个 png 输出。当我使用终端时,它工作得很好,所以我得到了我想要的,但是当我通过我的应用程序这样做时,我不知道为什么不生成 output.png。这是我做的一个例子:

//---GNUplot

   FILE *pipe;

   pipe = popen("/usr/local/bin/gnuplot --persist", "w");

   if (pipe != NULL){

     fprintf(pipe, "set samples 40\n");
     fprintf(pipe, "set isosamples 40\n");
     fprintf(pipe, "set hidden3d\n");
     fprintf(pipe, "set xrange [-8.000:8.000]\n");
     fprintf(pipe, "set yrange [-8.000:8.000]\n");
     fprintf(pipe, "set zrange [-2.000:2.000]\n");

     fprintf(pipe, "set terminal png\n");
     fprintf(pipe, "set output 'jose.png'\n");

     fprintf(pipe, "set title 'We are plotting from C'\n");
     fprintf(pipe, "set xlabel 'Label X'\n");
     fprintf(pipe, "set ylabel 'Label Y'\n");

     pclose(pipe);
   }

//---end

任何关于我做错了什么的线索??

在此先感谢

何塞

【问题讨论】:

  • 您遇到任何错误?

标签: c++ xcode macos png gnuplot


【解决方案1】:

看看你上面包含的内容,你还没有指定 plot 命令。 Gnuplot 在遇到 plot 命令之前不会生成任何东西。仅指定标签等不会导致任何输出。

你需要添加类似的东西

fprintf(pipe, "plot sin(x)\n");

或任何你想绘制的东西。如果您要为其提供数据,您将提供单独的数据行,后跟一个“e”来告诉它停止。

fprintf(pipe, "plot '-' u 1:2:3\n");
fprintf(pipe, "1 2 3\n");
fprintf(pipe, "4 5 6\n");
fprintf(pipe, "e\n");

在关闭管道之前以空白设置输出命令结束以刷新输出缓冲区也是一种好习惯:

fprintf(pipe, "set output\n");

最后,你在初始化 gnuplot 时不需要persist 命令。仅当您使用交互式终端并希望它在调用过程结束后保持打开状态时才需要该命令。


此外,有时需要确保输出目录符合预期。在这种情况下,使用set output 'full/path/to/file.png' 甚至set output './file.png' 指定输出文件的完整路径会有所帮助。

【讨论】:

  • 嗨马修,首先感谢您的快速回答。你说得对,我忘记了这行代码: fprintf(pipe, "splot cos(x)+cos(y)\n");我放了 --persist 因为我想在不使用 set terminal png 时查看输出...我添加了 frprintf(pipe, "set output\n") 但仍然没有生成 png
  • @JoseGarcia-Uceda 如果您有 splot 命令,请将其编辑到您的帖子中,以便与您正在运行的内容一起完成。您确定该文件不只是在不同的位置生成吗?尝试修改set output 'jose.png' 命令以使用完整路径,看看是否可行。也可以在没有持久选项的情况下尝试它,看看是否有效。我怀疑这与问题有关,但值得确定。
  • @JoseGarcia-Uceda 您是否在关闭管道之前和 plot 命令之后添加了空白 set output
  • 已解决!正如你所说,这就是路径。我只是输入了绝对路径,我得到了漂亮的图表:D 非常感谢!
  • @JoseGarcia-Uceda 我编辑了答案并将其放入其中,这样答案就不会隐藏在 cmets 中。如果你愿意,可以接受我的回答。你没有义务这样做,但它会给我和你一些声誉,并将问题标记为已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2021-12-28
  • 2022-11-13
  • 1970-01-01
相关资源
最近更新 更多