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;
}
훨씬 더 많은 옵션을 이용할 수 있습니다. 이러한 옵션은 깃허브 페이지에 설명되어 있습니다.
과학적인 목적으로 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를 설치합니다.설치 mingw64
MSYS2를 사용하고 윈도우 환경 변수 5에 이진 경로를 추가하는 c 컴파일러에 필요한 구성 요소.설치하다mathgl
MSYS2를 사용하는 라이브러리:
2단계 Crete eclipse project witch 포함 필수mathgl
필수 도서관입니다. 프로젝트에 필요한 라이브러리 추가:
프로젝트 우클릭 -> C/C++ 빌드 확장 -> 설정 -> MinGWC 연결기 확장 (확장되지 않은 경우) -> 라이브러리 -> 라이브러리 -> 라이브러리 -(-l) -> 추가...
여기에 추가해야 합니다.mgl2
그리고.mgl2-fltk
: 3단계(최종) 플롯할 코드 작성하기: 프로젝트 중에 .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
'programing' 카테고리의 다른 글
AngularJS 제어기 및 방법 (0) | 2023.10.13 |
---|---|
Listagg 함수 및 ORA-01489: 문자열 연결 결과가 너무 깁니다. (0) | 2023.10.13 |
브라우저에서 웹소켓 핑/퐁 프레임 전송 (0) | 2023.10.13 |
나는 C의 malloc()와 calloc()에 대해 매우 혼란스럽습니다. (0) | 2023.10.13 |
MariaDB - JSON 필드에서 Store 값으로 필드 값을 설정하는 방법 (0) | 2023.10.13 |