[C++] gnuplot으로 2D 그래프 그리기

amudomolla·2023년 4월 6일
0

C++

목록 보기
2/12
post-custom-banner

gnuplot을 다운로드 한 후에 작업이 가능하므로 밑의 링크 참고하기
✔️ 다운로드 방법


1. 간단한 2D 그래프 그리기

1) 게시물에서 마지막에 다운로드 받아서 돌려본 파일(참고)을 활용

2) 파일에서 pGnuPlotU.cpp말고, TestGNUPlotU.cpp를 수정(참고, 참고)

#include "pch.h"
#include <stdio.h>
#include "gnuplot_ref.h"  // 참고한 파일들의 네임을 수정해서 다른 것 뿐, 원래 파일명은 pGnuPlotU.h

int main(void)
{
	//gnuplot 설치 경로
	CpGnuplotU plot(_T("C:\\Program Files\\gnuplot\\bin\\wgnuplot.exe"));

	//plot.cmd("reset");

	plot.cmd("set xtics -3,0.5,3");
	plot.cmd("set ytics 0,0.2,1");
	plot.cmd("plot [-3:3][0:1]exp(-x**2)");

	getchar();
}

💻 결과



2. .txt파일 Data로 2D 그래프 그리기 (참고)

1) Data File 생성 후 저장

#2d_test.txt
#x              y
0.0123          5.21
0.168           6.02
0.184           6.08
0.190           6.51
0.226           6.75
0.259           6.81
0.304           7.15

📌 '#' 뒷부분은 주석으로 처리된다.

2) Data Plot

#include "pch.h"
#include <stdio.h>
#include "gnuplot_ref.h"

int main(void)
{
	//gnuplot 설치 경로
	CpGnuplotU plot(_T("C:\\Program Files\\gnuplot\\bin\\wgnuplot.exe"));
    
    // 데이터 파일 저장 경로
	plot.cmd("plot 'D:\\파일경로\\GNUPlotTest_2d_test1\\2d_test.txt'");

	getchar();
}

💻 결과



3. Data 여러 개인 경우, 원하는 열 Data만 추출해 2D 그래프 그리기 (참고, 참고)

1) Data File 생성 후 저장

#2d_text2.txt
#t      x        y        v       E
0.11    0.11    99.94   1       -1.078
0.12    0.12    99.92   1       -1.176
0.13    0.13    99.91   1       -1.274
0.14    0.14    99.90   1       -1.372  
0.15    0.15    99.88   1       -1.470
0.16    0.16    99.87   1       -1.568
0.17    0.17    99.85   1       -1.666
0.18    0.18    99.84   1       -1.764
0.19    0.19    99.82   1       -1.862

📌 값을 선택하는 경우, using 혹은 u 뒤에 사용하고 싶은 변수의 열을 :을 이용해 지정

2) Data Plot

#include "pch.h"
#include <stdio.h>
#include "gnuplot_ref.h"

#pragma warning(disable: 4996)

int main(void)
{
	//gnuplot 설치 경로
	CpGnuplotU plot(_T("C:\\Program Files\\gnuplot\\bin\\wgnuplot.exe"));

	plot.cmd("plot 'D:\\파일경로\\GNUPlotTest_2d_test1\\2d_test2.txt' u 2:3");
    // u 2:3 의 의미 : 2열을 x축으로, 3열을 y축으로 플로팅
    // u :2 의 의미 : 2열을 y축으로 플로팅

	getchar();
}

💻 결과

왼쪽이 'u 2:3' 을 입력하기 전의 결과 / 오른쪽이 'u 2:3' 을 입력한 후의 결과

3) 그래프 세부설정 (참고)

#include "pch.h"
#include <stdio.h>
#include "gnuplot_ref.h"

#pragma warning(disable: 4996)

int main(void)
{
	//gnuplot 설치 경로
	CpGnuplotU plot(_T("C:\\Program Files\\gnuplot\\bin\\wgnuplot.exe"));
	//위쪽 tic 없애기
	plot.cmd("set xtics nomirror");
	////오른쪽 tic 없애기
	plot.cmd("set ytics nomirror");
	plot.cmd("set border 3");
	// 그래프 size
	//plot.cmd("set terminal wxt size 1280,960");
	//Title
	plot.cmd("set title \"2DTest\"");
	//x,y축 label
	plot.cmd("set xlab \"x\"");
	plot.cmd("set ylab \"y\"");

	plot.cmd("plot 'D:\\파일경로\\GNUPlotTest_2d_test1\\2d_test2.txt' u 2:3 title \"x\" with l");
    // with l : line(선)으로 플로팅

	getchar();
}

💻 결과

border 3 입력 전 / 후

tic 없애기 전 / 후

with l 입력 후


4. Data File에서 Data의 구분이 띄어쓰기가 문자일 경우, Data 추출해 2D 그래프 그리기 (참고)

1) Data file 생성 후 저장

0,24.000000,0.000000,0,24,24,24
1,1.000000,0.000000,0,1,1,1
2,5.000000,0.000000,0,5,5,5
3,3.000000,0.000000,0,3,3,3
4,6500.000000,0.000000,0,6500,6500,6500
5,6609.000000,0.000000,0,6609,6609,6609
6,6621.000000,0.000000,0,6621,6621,6621
7,6671.000000,0.000000,0,6671,6671,6671
8,6745.000000,0.000000,0,6745,6745,6745
9,6785.000000,0.000000,0,6785,6785,6785
10,6864.000000,0.000000,0,6864,6864,6864
...

2) Data Plot

#include "pch.h"
#include <stdio.h>
#include "gnuplot_ref.h"

#pragma warning(disable: 4996)

int main(void)
{
	//gnuplot 설치 경로
	CpGnuplotU plot(_T("C:\\Program Files\\gnuplot\\bin\\wgnuplot.exe"));
	//위쪽 tic 없애기
	plot.cmd("set xtics nomirror");
	////오른쪽 tic 없애기
	plot.cmd("set ytics nomirror");
	// 그래프 size
	//plot.cmd("set terminal wxt size 1280,960");
	//Title
	plot.cmd("set title \"2DTest\"");
	//x,y축 label
	plot.cmd("set xlab \"Pixel\"");
	plot.cmd("set ylab \"ADU\"");
	// Data File에서 데이터의 구분을 ',' 로 했다는 의미 
	plot.cmd("set datafile separator \",\"");
	plot.cmd("plot 'D:\\파일경로\\GNUPlotTest_2d_test1\\test3.txt' using 1:2 title \"x\" with l");

	getchar();
}

💻 결과

profile
👩‍💻 기록 및 복습을 위함
post-custom-banner

0개의 댓글