我是一名机械工程师,他对C编程知之甚少。我写了一些代码来进行模拟,我想要模拟仿真结果。目前我使用Dev-C
来编写代码。使用fopen
和fprintf
命令生成.dat
文件,其中包含结果。然后我打开GNUPLOT
程序并导入我的.dat
文件以绘制结果。这需要时间,我必须等到模拟结束。有没有一种简单的方法可以将我的绘图仪与Dev-C
连接起来,所以我的绘图仪在模拟过程中开始绘制数据?任何图书馆等?
答案 0 :(得分:12)
既然你已经知道了gnuplot,最简单的方法就是从程序中调用gnuplot并将数据传递给它:
FILE *gnuplot = popen("gnuplot", "w");
fprintf(gnuplot, "plot '-'\n");
for (i = 0; i < count; i++)
fprintf(gnuplot, "%g %g\n", x[i], y[i]);
fprintf(gnuplot, "e\n");
fflush(gnuplot);
答案 1 :(得分:3)
好的,当你写到文件时,一个解决方案就是在你写出文件时调用system()
,然后调用gnuplot。
但是,这意味着您每次都应该更改文件名,但我担心如果您这样做会看起来不正确,因为您每次都会发送少量数据。
http://www.gnu.org/software/libc/manual/html_node/System-Calls.html
我从未使用过gnuplot,但是如果你看一下这个页面(http://gnuplot-tricks.blogspot.com/),你可能会发现一些能让它运作良好的技巧。
但是,我想,除非你打算自己绘制一切,并跳过gnuplot,否则你可能只需要等待,就像你一样。
你可能会发现gnuplot的C接口可以帮助你:
答案 2 :(得分:2)
我一直在使用PLPlot从C进行绘图,并发现它既有效又简单。它是跨平台,开源的,并支持丰富的绘图功能。我建议看一下这些例子来开始。
答案 3 :(得分:1)
pbPlots非常易于使用,并且可以与所有C编译器一起使用。
从github page下载pbPlots.c / h和supportLib.c / h并将其包含在您的版本中。
这是一个完整的示例,它将在PNG文件中生成图。
#include "pbPlots.h"
#include "supportLib.h"
int main(){
double x [] = {-1, 0, 1, 2, 3, 4, 5, 6};
double y [] = {-5, -4, -3, -2, 1, 0, 1, 2};
RGBABitmapImageReference *imageRef = CreateRGBABitmapImageReference();
DrawScatterPlot(imageRef, 600, 400, x, 8, y, 8);
size_t length;
double *pngData = ConvertToPNG(&length, imageRef->image);
WriteToFile(pngData, length, "plot.png");
return 0;
}
还有更多可用选项,这些选项在github页面上进行了描述。
答案 4 :(得分:0)
我仔细看看其他人对gnuplot中的实时绘图做了什么,并发现了这个:
http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html
有一个可以驱动绘图的Perl脚本,你只需输入你的信息。
由于您的数据正在写入文件,您可能需要tail -f yourdata.dat
并将其输入到实时绘图仪中。
另外,因为你正在使用stdio文件调用,所以你需要定期刷新(通过调用fflush
)
显然,您的模拟将在后台或另一个shell中运行。这样你就可以在不中断模拟的情况下随时摆脱绘图。
希望对你有用。
答案 5 :(得分:0)