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인데, 숫자에 따라 그래프가 어떻게 표현될 것인지를 의미한다.
마지막으로 준비한 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 |