programing

c 프로그램으로 데이터를 플롯하는 방법은?

closeapi 2023. 10. 13. 22:15
반응형

c 프로그램으로 데이터를 플롯하는 방법은?

저는 C 프로그래밍에 대한 지식이 부족한 기계 엔지니어입니다.시뮬레이션을 하기 위해 코드를 작성했고, 시뮬레이션 결과를 시각화하고 싶습니다.하고 있는 중입니다.Dev-C내 코드를 써줘서요와 함께fopen그리고.fprintf합니다가 생성됩니다..dat결과가 포함된 파일.는을 .GNUPLOT.dat파일로 결과를 표시합니다.이것은 시간이 걸리고 시뮬레이션이 끝날 때까지 기다려야 합니다.까를 연결할 수 이 있습니까?Dev-C에 내 를 모의하기 ?까?

gnupplot을 이미 알고 있으므로 가장 간단한 방법은 프로그램에서 gnupplot을 호출하여 데이터를 파이프링하는 것입니다.

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);

저는 C로부터 플롯을 플롯으로 사용해왔고, 효과적이면서도 쉬운 것을 발견했습니다.크로스 플랫폼, 오픈 소스이며 다양한 플롯 기능을 지원합니다.시작하기 위해 예를 한 번 보는 것을 추천합니다.

에 쓰는요, 처럼, 입니다, 을 입니다.system()파일에 쓸 때 호출하고 gnuplot에 호출합니다.

하지만, 파일 이름을 매번 바꿔야 한다는 뜻인데, 그럴 경우 매번 적은 양의 데이터를 보내는 것이기 때문에 정확해 보이지 않을 것입니다.

http://www.gnu.org/software/libc/manual/html_node/System-Calls.html

gnupplot을 사용해 본 적은 없지만 이 페이지(http://gnuplot-tricks.blogspot.com/) 를 보시면 잘 작동할 수 있는 몇 가지 요령을 찾을 수 있을 것입니다.

하지만, 제 생각에는, 당신이 직접 모든 것을 계획하고, gnupplot을 건너뛰지 않는 한, 당신은 그대로 기다리기만 하면 될 것 같습니다.

gnuplot에 대한 C 인터페이스가 다음과 같은 도움이 될 수 있습니다.

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

pbPlots는 매우 사용하기 쉽고 모든 C 컴파일러와 함께 작동합니다.

github 페이지에서 pbPlots.c/h를 다운로드하고 Lib.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

훨씬 더 많은 옵션을 이용할 수 있습니다. 이러한 옵션은 깃허브 페이지에 설명되어 있습니다.

과학적인 목적으로 DISLIN이라는 대규모 도서관이 있습니다.포트란 언어로도 사용 가능.

공식 홈페이지에서 예시를 확인하실 수 있습니다.

DISLIN 홈페이지에서 자유롭게 구할 수 있습니다.

다른 사람들이 gnupplot에서 실시간 플롯과 관련하여 무엇을 했는지 확인하기 위해 잠시 둘러본 결과 다음과 같이 나타났습니다.

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

음모를 실행할 수 있는 작은 Perl 스크립트가 있습니다. 그리고 당신은 당신의 정보를 도청합니다.

데이터가 파일에 기록되고 있으므로 다음 작업을 수행할 수 있습니다.tail -f yourdata.dat실시간 플로터에 파이프로 연결할 수 있습니다.

또한 stdio 파일 호출을 사용하기 때문에 정기적으로 플러시해야 합니다.fflush)

분명히 시뮬레이션은 백그라운드나 다른 셸에서 실행됩니다.그렇게 하면 시뮬레이션을 방해하지 않고 언제든지 계획에서 벗어날 수 있습니다.

그것이 당신에게 도움이 되기를 바랍니다.

C 프로그래밍 언어를 사용한 플롯에 대한 단계별 솔루션:

1단계 요구사항: 1.윈도우 10/11 64비트 2.eclipse IDE (CDT 또는 scientific computing) 설치 3MSYS24를 설치합니다.설치 mingw64MSYS2를 사용하고 윈도우 환경 변수 5에 이진 경로를 추가하는 c 컴파일러에 필요한 구성 요소.설치하다mathglMSYS2를 사용하는 라이브러리:

2단계 Crete eclipse project witch 포함 필수mathgl필수 도서관입니다.Create library 프로젝트에 필요한 라이브러리 추가:

프로젝트 우클릭 -> C/C++ 빌드 확장 -> 설정 -> MinGWC 연결기 확장 (확장되지 않은 경우) -> 라이브러리 -> 라이브러리 -> 라이브러리 -(-l) -> 추가...

여기에 추가해야 합니다.mgl2그리고.mgl2-fltk: library inclution3단계library inclution(최종) 플롯할 코드 작성하기: 프로젝트 중에 .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;
}

이 코드를 작성한 후 디버그 폴더에 포함된 실행 파일을 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/14311640/how-to-plot-data-by-c-program

반응형