9

这是我的第一篇文章,我在 C++ 和一般编译方面是个新手。

我正在编译一个需要绘制一些图表的程序。该程序创建一个.dat 文件,然后我应该打开 gnuplot 并编写绘图“ .dat”。没关系。

有没有办法让 gnuplot 自动打开并显示我需要的情节?我应该在代码中使用一些 system() 函数来调用 gnuplot 但我怎样才能让他绘制我需要的东西?

对不起我不完美的英语:s

无论如何感谢您的关注!

4

7 回答 7

8

根据您的操作系统,您可能可以使用popen()。 这将让您生成一个 gnuplot 进程,然后像任何其他 FILE* 一样写入它。

如果您有要绘制的数据点,您可以将它们与plot "-" ...选项内联传递。同样,您可能想要探索设置数据样式点/线/线点/等选项。


如果没有暂停或持续,gnuplot 将在输入流结束时终止。在您的示例情况下,那将是到达文件末尾的时候。


要生成(写入)输出文件(图形),请使用:

set terminal png small
set output "filename.png"

有很多选项可以设置终端。Png通常在那里。如果没有,也许是 gif、tiff 或 jpeg?

注意覆盖文件!

您可能希望使用set size 2,2来制作更大的图表。一些设置终端变体还允许您指定大小。

于 2009-01-08T20:00:55.287 回答
5

我今天也在学习这个。这是我做的一个小例子。

#include <iostream>
#include <fstream> 
using namespace std;
int main(int argc, char **argv) {
    ofstream file("data.dat");
    file << "#x y" << endl;
    for(int i=0; i<10; i++){
        file << i << ' ' << i*i << endl;
    }
    file.close();
    return 0;
}

将其保存为 plot.cpp 并使用 g++ 编译:

g++ plot.cpp -o plot

运行程序以创建 .dat 文件:

./plot

将以下 gnuplot 脚本另存为 plot.plt:

set terminal svg enhanced size 1000 1000 fname "Times" fsize 36
set output "plot.svg"
set title "A simple plot of x^2 vs. x"
set xlabel "x"
set ylabel "y"
plot "./data.dat" using 1:2 title ""

使用 gnuplot 运行脚本以生成 .svg 文件:

gnuplot plot.plt

结果图将在 plot.svg 中。如果您省略指定输出的前几行,它将在窗口中呈现。玩得开心!

于 2010-10-19T21:49:47.840 回答
2

有时它就像人们想象的那样简单

    gnuplot file

其中 file 既不是您的数据也不是您的结果文件,而是一个包含您将在命令行中键入的命令的文件。只需在此处输入您需要的命令(您拥有的常量文件或生成它)。执行该文件中的所有命令后,gnuplot 退出。

于 2009-01-08T14:45:35.627 回答
1

是的你可以。您可以创建一个文件,其中包含您要输入的命令来设置绘图并打开从该文件运行的 gnuplot。 这个链接有一篇文章解释了如何做到这一点。您还可以输出到 EPS 或其他图形输出格式,并使用读取文件的另一个小部件显示绘图。

于 2009-01-08T14:42:27.897 回答
1

您可能需要在命令中使用“-persist”标志。我知道在 *nix 系统上,如果您希望在 gnuplot 进程完成并退出后保留绘图窗口,则需要此标志。

gnuplot -persist commands.gp

此外,您可以在文件中添加任意数量的 gnuplot 命令。在这方面,该文件的行为有点像批处理脚本。

于 2009-01-08T15:38:50.903 回答
0

您可能需要设置终端类型。阅读有关此的 gnuplot 文档。

于 2009-01-08T15:11:40.660 回答
0

您可能需要添加一行

pause -1

这将显示绘图,直到按下返回。
您可能看到的是 gnuplot 在绘图有时间显示之前运行并退出。

于 2009-01-08T15:40:01.023 回答