본문 바로가기
Terminology

[gnuplot] 2D graph 구현하기 (txt파일 불러오기)

by 슥차 2023. 7. 3.

gnuplot을 이용해서 visual studio의 배열을 불러와서 2D graph로 출력해보려고 한다.

기반 코드는 검색을 통해 다양하게 찾을 수 있는데, gnuplot의 command에서 직접 쓰면 어느세월에 다 쓸지 모르겠다.

 

1. 준비물

data file: txt파일로 저장해서 txt파일을 준비했다.

다만 linux기반의 환경에서는 1차원 데이터 파일 2개를 2차원으로 합치는 paste 코드가 있지만 windows 기반의 gnuplot에서는 활용할 수 없는 것 같다.

그냥 2차원 이상의 데이터를 들고오자.

 

참고로 visual studio에서 서로 연관된 1차원 데이터 2개로 2차원 데이터를 txt 파일 형식으로 저장하는 방법은

FILE* fp_data = fopen("data.txt", "a");
for(int i=0; i<=max; i++){
    fprintf(fp_data, "%e %f\n", xdata[i], ydata[i]);
}
fclose(fp_data);

대략 이런 형식으로 쓰면 데이터가 아래와 같이 저장된다.

 

이 데이터 파일 (txt파일)을 가지고 이제 gnuplot에 넣어 볼껀데, 그냥 gnuplot command에서 넣어볼꺼다.

 

gnuplot을 켜고, 해당 txt 파일이 있는 곳으로 directory를 설정해주자.

이 change directory의 폴더를 클릭해서 간단하게 txt파일이 위치한 곳으로 찾아갈 수 있다.

 

gnuplot command는 txt파일을 읽어올 수 있기에 그냥 txt파일을 하나 생성해서 여기에 미리 입력을 해주자.

set terminal pngcairo enhanced color font "TimesNewRoman,48" dashlength 0.5 size 1920,1440
set border lw 5
set pointsize 2
set tics scale 1

xmin = 0.
xmax = 2.0
ymin = 0.
ymax = 10.0
set title 'Velocity'
set output 'data.png'

set xrange [xmin:xmax]
set xlabel 'time [s]' offset 0.,0.4 font "TimesNewRoman,48"
#set autoscale x
#set yrange [ymin:ymax]
set ylabel 'Velocity [10^7 cm/s]' offset 1.,0. font "TimesNewRoman,48"
set autoscale y

#set key at xmax, ymax + 0.15

plot 'data.txt' u 1:2 w points pt 7 title "Velocity"

특징으로는 #을 문장 앞에 붙이면 주석 처리가 된다는 점이 있다.

또한 output파일을 출력해야 볼 수 있는데, png파일이나 pdf 등으로 파일 확장자를 두면 된다.

 

마지막줄을 제외하고는 그냥 graph를 꾸며주는 친구들이다.

해당 결과의 x와 y scale을 알면 그냥 그 scale을 직접 입력해주면 된다.

모르는 경우에는 autoscale을 이용하면 된다.

위 코드에서는 y축만 autoscale을 이용해두었다.

key는 출력한 데이터의 범례가 위치하는 곳인데, 다양한 방법으로 위치를 지정할 수 있고, 지정하지 않으면 default로 아래 그림의 위치에 들어가는 것 같다.

그리고 label에 단위 등 때문에 위첨자, 아래첨자가 들어가는 경우가 있는데 코드는 단순하다.

위첨자는 ^를 이용하면 되고 (ex, 10^7)

아래첨자는 _를 이용하면 된다. (ex, V_s)

 

마지막 plot ~줄이 중요한 부분으로 데이터를 불러온다.

u는 using의 약자

w는 with의 약자

pt는 point type의 약자이다.

 

u 1:2는 해당 'data.txt' 파일에서 1행과 2행을 각각 x와 y축으로 사용하겠다는 것이다.

w points는 point 형식으로 출력하겠다는 것인데, 이어진 그래프로 출력하고 싶으면 w lines를 넣으면 된다.

pt는 option인데, 숫자에 따라 그래프가 어떻게 표현될 것인지를 의미한다.

(좌) pt 7, (우) pt 6

 

마지막으로 준비한 script를 gnuplot의 command 창에 간단하게 적을 수 있다.

load 'data_script.txt'

script로 쓰이는 파일을 불러오면 된다.

 

'Terminology' 카테고리의 다른 글

Sensitivity  (0) 2023.07.08
Crosstalk  (0) 2023.07.07
[CIS] QE (Quantum Efficiency)  (0) 2023.07.03
[CIS] Pedestal  (0) 2023.07.03
[Optic] 굴절률  (0) 2023.06.30