如何用c语言绘制数据图?

6ie5vjzr  于 2023-04-05  发布在  其他
关注(0)|答案(7)|浏览(247)

我是一名机械工程师,对C编程只有有限的知识。我写了一些代码,以便进行模拟,我想可视化模拟结果。目前我正在使用Dev-C编写代码。通过fopenfprintf命令,我生成了一个包含结果的.dat文件。然后我打开GNUPLOT程序并导入我的.dat文件来绘制结果。这需要时间,我必须等到模拟结束。有没有简单的方法将我的绘图仪连接到Dev-C,这样我的绘图仪就可以在模拟过程中开始绘制数据?任何库或等等?

r55awzrz

r55awzrz1#

既然你已经知道了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);
krcsximq

krcsximq2#

我一直在使用PLPlot从C绘图,并发现它既有效又简单。它是跨平台的,开源的,并支持丰富的绘图功能。我建议看看示例来开始。

6tr1vspr

6tr1vspr3#

好的,一个解决方案是,当你写出一个文件时,只需要在你写出文件时调用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/

mrwjdhj3

mrwjdhj34#

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页面上描述。

gstyhher

gstyhher5#

有一个广泛的库称为DISLIN用于科学目的。即使在Fortran语言可用。
您可以在官方网站上查看示例。
您可以在DISLIN Homepage中免费获取

gijlo24d

gijlo24d6#

我稍微看了一下周围的人,看看他们在gnuplot中对实时绘图做了什么,发现了这个:
http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html
有一个小的Perl脚本可以驱动绘图,你只需要输入你的信息。
由于要将数据写入文件,因此可能需要tail -f yourdata.dat并将其通过管道传输到实时绘图仪中。
另外,由于您使用的是stdio文件调用,因此需要定期刷新(通过调用fflush
显然你的模拟会在后台或其他shell中运行,这样你就可以在任何时候脱离绘图而不中断模拟。
希望对你有用。

bpzcxfmw

bpzcxfmw7#

使用C编程语言逐步解决绘图问题:
步骤1要求:1. Windows 10/11 64 bit 2. Install eclipse IDE(CDT或科学计算)3.使用MSYS 2安装MSYS 2 4. Installmingw64 c编译器所需的组件,并将其二进制路径添加到Windows环境变量5.使用MSYS 2安装mathgl库:

第2步Crete eclipse project witch includes required mathgl required library.

将所需的库添加到项目:
右键点击项目-〉展开C/C++ Build -〉Setting -〉展开MinGW C Linker(如果没有展开)-〉Libraries -〉Libraries(-l)-〉add...
这里必须添加mgl2mgl2-fltk

步骤3(final)编写代码绘制:在project下创建一个.c文件,并将下面的代码写入其中。

#include <mgl2/mgl_cf.h>
//#include <mgl2/wnd_cf.h>
#include <mgl2/fltk.h>

#include <synchapi.h>


HMGL gr = NULL;//HMGL mgl_create_graph_fltk

int main(int argc,char **argv)
{

gr = mgl_create_graph_fltk(NULL, "First C graph", NULL, NULL);

double x[50]={0};
HMDT dat=mgl_create_data_size(50, 1, 1);

while(1)
{
    Sleep(100);
    mgl_clf ( gr) ;
    mgl_set_range_val(gr, 'y', -1, 1);
    mgl_set_range_val(gr, 'x', 0, 512);
    mgl_set_origin(gr, 0, 0, 0);
//  mgl_box(gr);
    mgl_axis(gr, "", "", "");
    mgl_set_font_size(gr, 1.5);
//  mgl_grid(gr, a, "", "");



    int i=0;
    while(i<50)
    {
        x[i]=(mgl_rnd()*2)-1;
        i++;
    }

    mgl_data_set_double(dat, x, 50, 1, 1);
//  mgl_line(gr,0,0,0,2*mgl_rnd()-1,2*mgl_rnd()-1,0,"Ar2",-.5);
    mgl_stem(gr, dat, "ro", "");

//   mgl_wnd_update(gr);
}
return 0;
}

生成此代码后,您将发现debug文件夹中包含一个可执行文件。

相关问题