【发布时间】:2020-03-16 14:31:08
【问题描述】:
我浏览了许多可以回答问题的链接,但没有一个提供详细的分步方法。我有一段需要使用 gnu plot 绘图的 c++ 代码。
我什至参考了文档。对我没用。
【问题讨论】:
我浏览了许多可以回答问题的链接,但没有一个提供详细的分步方法。我有一段需要使用 gnu plot 绘图的 c++ 代码。
我什至参考了文档。对我没用。
【问题讨论】:
所以,对于Windows 10、C++11或C++14,流程如下:-
1) 从Sourceforge 下载压缩文件并将其解压到“C:\gnuplot”。
2) 下载 gnuplot 附加文件(IDK 自己使用 !)来自Google Code。将这些文件提取到同一文件夹中,即“C:\gnuplot”。
3) 打开这个 gnuplot 文件夹并双击扩展名为 .bat 的文件(批处理文件)。这是您的文件夹的外观:
现在,您可以继续编写代码。假设您使用 Code Blocks 使用以下 sn-p 绘制曲线:
//Plot the results
vector<float> x;
vector<float> y1, y2;
for (int i = 0; i < 1000; i++) {
x.push_back(i * 2 * PI / 1000);
y1.push_back(sin(i * 2 * PI / 1000));
y2.push_back(i * 2 * PI / 1000); //Any random function...
}
FILE * gp = popen("gnuplot", "w");
fprintf(gp, "set terminal wxt size 600,400 \n");
fprintf(gp, "set grid \n");
fprintf(gp, "set title '%s' \n", "f(x) = sin (x)");
fprintf(gp, "set style line 1 lt 3 pt 7 ps 0.1 lc rgb 'green' lw 1 \n");
fprintf(gp, "set style line 2 lt 3 pt 7 ps 0.1 lc rgb 'red' lw 1 \n");
fprintf(gp, "plot '-' w p ls 1, '-' w p ls 2 \n");
//Exact f(x) = sin(x) -> Green Graph
for (int k = 0; k < x.size(); k++) {
fprintf(gp, "%f %f \n", x[k], y1[k]);
}
fprintf(gp, "e\n");
//f(x) = sin(x) -> Red Graph
for (int k = 0; k < x.size(); k++) {
fprintf(gp, "%f %f \n", x[k], y2[k]);
}
fprintf(gp, "e\n");
fflush(gp);
system("pause");
pclose(gp);
在编译时,您可能会看到“找不到popen”或“找不到pclose”的错误。解决方法是:
extern "C" FILE *popen(const char *command, const char *mode);
在 main() 例程之前的全局范围内。
//pclose(gp);
现在,您的程序应该可以正常运行编译,并且 gnuplot 窗口应该与 cmd 窗口一起自动弹出。有时响应可能会很慢,甚至可能停止响应,但请等待并享受结果。
【讨论】: