如何用c程序绘制数据?

时间:2013-01-14 02:32:09

标签: c graph plot gnuplot simulation

我是一名机械工程师,他对C编程知之甚少。我写了一些代码来进行模拟,我想要模拟仿真结果。目前我使用Dev-C来编写代码。使用fopenfprintf命令生成.dat文件,其中包含结果。然后我打开GNUPLOT程序并导入我的.dat文件以绘制结果。这需要时间,我必须等到模拟结束。有没有一种简单的方法可以将我的绘图仪与Dev-C连接起来,所以我的绘图仪在模拟过程中开始绘制数据?任何图书馆等?

6 个答案:

答案 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接口可以帮助你:

http://ndevilla.free.fr/gnuplot/

答案 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;
 }

the generated plot

还有更多可用选项,这些选项在github页面上进行了描述。

答案 4 :(得分:0)

我仔细看看其他人对gnuplot中的实时绘图做了什么,并发现了这个:

http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html

有一个可以驱动绘图的Perl脚本,你只需输入你的信息。

由于您的数据正在写入文件,您可能需要tail -f yourdata.dat并将其输入到实时绘图仪中。

另外,因为你正在使用stdio文件调用,所以你需要定期刷新(通过调用fflush

显然,您的模拟将在后台或另一个shell中运行。这样你就可以在不中断模拟的情况下随时摆脱绘图。

希望对你有用。

答案 5 :(得分:0)

为了科学目的,有一个名为DISLIN的扩展库。甚至可以使用Fortran语言。

您可以在官方网站上查看示例。

您可以在DISLIN Homepage中免费获取它