这是我的第一篇文章,我在 C++ 和一般编译方面是个新手。
我正在编译一个需要绘制一些图表的程序。该程序创建一个.dat 文件,然后我应该打开 gnuplot 并编写绘图“ .dat”。没关系。
有没有办法让 gnuplot 自动打开并显示我需要的情节?我应该在代码中使用一些 system() 函数来调用 gnuplot 但我怎样才能让他绘制我需要的东西?
对不起我不完美的英语:s
无论如何感谢您的关注!
根据您的操作系统,您可能可以使用popen()。 这将让您生成一个 gnuplot 进程,然后像任何其他 FILE* 一样写入它。
如果您有要绘制的数据点,您可以将它们与plot "-" ...选项内联传递。同样,您可能想要探索设置数据样式点/线/线点/等选项。
如果没有暂停或持续,gnuplot 将在输入流结束时终止。在您的示例情况下,那将是到达文件末尾的时候。
要生成(写入)输出文件(图形),请使用:
set terminal png small
set output "filename.png"
有很多选项可以设置终端。Png通常在那里。如果没有,也许是 gif、tiff 或 jpeg?
注意覆盖文件!
您可能希望使用set size 2,2来制作更大的图表。一些设置终端变体还允许您指定大小。
我今天也在学习这个。这是我做的一个小例子。
#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 中。如果您省略指定输出的前几行,它将在窗口中呈现。玩得开心!
有时它就像人们想象的那样简单
gnuplot file
其中 file 既不是您的数据也不是您的结果文件,而是一个包含您将在命令行中键入的命令的文件。只需在此处输入您需要的命令(您拥有的常量文件或生成它)。执行该文件中的所有命令后,gnuplot 退出。
是的你可以。您可以创建一个文件,其中包含您要输入的命令来设置绘图并打开从该文件运行的 gnuplot。 这个链接有一篇文章解释了如何做到这一点。您还可以输出到 EPS 或其他图形输出格式,并使用读取文件的另一个小部件显示绘图。
您可能需要在命令中使用“-persist”标志。我知道在 *nix 系统上,如果您希望在 gnuplot 进程完成并退出后保留绘图窗口,则需要此标志。
gnuplot -persist commands.gp
此外,您可以在文件中添加任意数量的 gnuplot 命令。在这方面,该文件的行为有点像批处理脚本。
您可能需要设置终端类型。阅读有关此的 gnuplot 文档。
您可能需要添加一行
pause -1
这将显示绘图,直到按下返回。
您可能看到的是 gnuplot 在绘图有时间显示之前运行并退出。