목차
지난번에 포스팅한
에 이어서, GNUPLOT에서 2차원 그래프를 디자인하는 방법에 대해 알아봅시다. 가로 X축과 세로 Y축을 가진 2차원 그래프는 plot 명령어를 이용해서 그릴 수 있죠. GNUPLOT 콘솔이나, 스크립트 파일에 다음과 같이 입력하면 됩니다.
plot <함수 또는 데이터 파일> <옵션>
그래프 선 모양이나, 범례에 표시될 이름을 <옵션> 에서 지정하는 방식입니다. 여러개의 그래프를 그리기 위해서는 쉼표(,)를 사용해서 분리해주면 되는데요. 한 줄에 입력하기에는 명령어가 너무 길어져서 줄바꿈을 해야 할 경우, 쉼표 뒤에 역슬래쉬(\)를 입력하고 엔터키를 누르면 되겠습니다.
X,Y 축의 범위 및 이름 설정
2차원 그래프는 기본적으로 가로방향의 X축과 세로방향의 Y축을 가지고 있고, 이들의 범위 및 이름을 정확히 표기해줘야 그래프의 가독정이 좋아집니다. 범위를 지정할 때는 다음과 같이 xrange 및 yrange 옵션을 사용하면 됩니다.
set xrange [<X축 최소값>:<X축 최대값>]
set yrange [<Y축 최소값>:<Y축 최대값>]
최소값 및 최대값에는 숫자를 직접 넣어도 됩니다만, 범례의 위치를 지정하거나 각종 기호들을 추가할 경우를 대비해서 별도로 변수를 정의해 놓는것도 나쁘지 않습니다.
xmin = 0.
xmax = 10.
ymin = -5.
ymax = 5.
set xrange [xmin:xmax]
set yrange [ymin:ymax]
이렇게 하면 X축은 0에서 10까지의 범위를, Y축은 -5에서 5까지의 범위를 갖는 그래프를 그릴 수 있게 됩니다.
X,Y 축의 이름을 설정할 때는 xlabel 및 ylabel 옵션을 각각 사용합니다.
set xlabel <X축 이름> offset <가로 변위>,<세로 변위> font <글씨체>
set ylabel <Y축 이름> offset <가로 변위>,<세로 변위> font <글씨체>
축의 이름과 글씨체는 큰따옴표 또는 작은따옴표 안에 적으면 되겠고요. 변위의 경우 기본적으로는 0으로 설정되어 있습니다만, 축의 이름을 다른 곳에 표시하고 싶다면 그에 맞게 값을 지정하면 됩니다. 글씨체 이름과 크기를 함께 지정해줄 수 있는데, 예를 들어서 크기가 48인 Times New Roman 을 사용하고 싶다면 "TimesNewRoman,48" 로 지정하면 됩니다.
그래프 선 모양 및 색상 설정
여러개의 그래프를 함께 그리는 경우, 일부 그래프를 점선으로 그리는 것이 유용할 때가 있는데요. dashtype 또는 줄여서 dt 옵션을 통해 점선의 종류를 지정할 수 있습니다. 또한 linewidth 또는 줄여서 lw 옵션을 이용하면 선의 굵기를 정할 수 있죠. 마지막으로 선의 색상을 지정하기 위해서는 linecolor 옵션을 사용합니다. 모양과 색상 등의 정보를 하나로 모아서 다음과 같이 선의 스타일을 정의해 두면 편리합니다.
set style line <스타일 번호> dt <점선 타입> lw <굵기> linecolor <색상>
그리고 그래프를 그릴 때 linestyle <스타일 번호> 옵션을 넣어주면, 해당 스타일로 선이 그려지게 되죠.
예를 들어서,
set style line 14 dt 4 lw 5 linecolor rgb 'blue'
라고 정의하면 점선형태가 4, 굵기는 5, 색상은 파란색인 스타일을 14번으로 정의할 수 있게 되는데요. 여기서 스타일 번호는 다른것과 겹치지 않는 이상 임의대로 지정할 수 있습니다. 그리고 삼각함수를 14번 스타일로 그리고 싶다면,
plot sin(x) linestyle 14
와 같이 해주면 되겠습니다.
색상을 지정하는 또다른 방법은 RGB 256컬러를 이용하는 것입니다. 예를 들어서, 붉은색을 color1이라는 이름으로 정의하고 싶다면,
color1 = '#FF0000'
라고 한 다음, linecolor rgb color1 옵션으로 해당 색상을 사용할 수 있습니다.
범례 설정
그래프에서 범례의 위치를 정하기 위해서 key 옵션을 사용할 수 있습니다.
- 오른쪽 상단
set key right top
set key at <범례 오른쪽 상단 코너의 X좌표>,<Y좌표> - 오른쪽 하단
set key right bottom
set key at <범례 오른쪽 하단 코너의 X좌표>,<Y좌표> - 왼쪽 상단
set key left top
set key at <범례 왼쪽 상단 코너의 X좌표>,<Y좌표> - 왼쪽 하단
set key left bottom
set key at <범례 왼쪽 하단 코너의 X좌표>,<Y좌표>
앞에서 X,Y 축의 범위를 지정할 때 별도의 변수들 (xmin, xmax, ymin, ymax)을 정의하고 이용했었는데요. 범례의 좌표를 설정할 때도 이 변수들을 사용할 수 있습니다. 예를 들어서
set key right bottom
set key at xmin + 0.97 * (xmax - xmin), ymin + 0.03 * (ymax - ymin)
와 같이 지정해 줄 수 있는것이죠.
이제 첫번째 예시를 살펴봅시다.
gp_example2D_01.txt [다운로드]
범례에 표시될 이름은 title <제목>과 같은 형식으로 지정할 수 있고요. 한글로 그래프의 제목을 짓는게 가능하며, /Symbol 을 통해서 그리스 문자도 입력할 수 있습니다. 예를 들어서, 대문자 델타는 {/Symbol D} 로 입력할 수 있죠. 여러개의 그래프를 그릴때 역슬래쉬(\)를 사용하면, 스크립트 내에서 줄바꿈을 할 수 있습니다.
기호 및 화살표 추가하기
그래프 근처에 기호나 화살표를 별도로 추가하여 가독성을 높일 수 있습니다. label 옵션을 이용해서 기호나 문자열을 원하는 위치에 배치할 수 있는데요. 다음 형식을 따르면 됩니다.
set label <라벨 번호> <라벨 내용> at <기호/문자의 X좌표>,<Y좌표> font <글씨체>
라벨 번호는 중복되지 않는 범위 내에서 임의의 숫자를 할당하면 되고, 라벨 내용에는 삽입하고자 하는 기호나 문자열을 큰따옴표 또는 작은따옴표 내에 적어넣으면 되죠. X,Y 좌표의 경우 숫자를 직접 입력해도 되고, 범례의 경우와 비슷하게 변수를 이용할 수도 있습니다. 글씨체를 지정하는 것은 X,Y 축의 이름을 설정할 때와 마찬가지로 할 수 있습니다.
화살표를 추가하기 위해서는 arrow 옵션을 이용하면 되는데요.
set arrow from <시작점 X좌표>,<Y좌표> to <끝 지점 X좌표>,<Y 좌표> <옵션>
화살표의 시작 및 끝 지점의 위치를 from 과 to 뒤에 각각 지정해줍니다. <옵션> 항목에서 선의 모양, 굵기 및 색상을 지정할 수 있습니다. 또한 nohead 옵션을 이용해서 화살표 대신 일반적인 직선을 그리는 것도 가능하죠.
사용자 지정 함수
형태가 복잡한 함수를 별도의 이름으로 정의해 두면 편리합니다. 다음 형식을 따르면 되는데요.
<함수의 이름>(<인자>) = <함수의 정의>
함수를 정의할 때는 앞의 괄호 안에 있는 <인자>와 동일한 것을 사용해야 합니다.
예를 들어서
func(t) = cos(t) / (1 + t * t)
처럼 정의해 주면, 우변에 나와있는 함수를 func 라는 이름으로 대체할 수 있는 것입니다.
두번째 예시입니다.
gp_example2D_02.txt [다운로드]
여기서는 사인 함수를 func 이라는 이름으로 재정의했고, 화살표를 그리는 기능을 이용해서 점선을 그렸습니다.
데이터 파일로부터 그래프 그리기
파일에 기록된 숫자로부터 그래프를 그릴 수 있습니다. 숫자로 이루어진 여러개의 열(column)을 가진 텍스트 파일을 사용할 수 있는데요. X축과 Y축으로 사용할 열을 다음 형식으로 지정해 줘야 합니다.
plot <파일 이름> u <X축 열>,<Y축 열> <옵션>
파일 이름의 경우 다른 문자열과 마찬가지로 큰따옴표 또는 작은따옴표 안에 들어가야 합니다. 그래프 스타일과 범례에 표시될 제목을 <옵션> 항목에서 정하는 것은 앞에서 설명한 것과 다르지 않고요. 한 가지 추가된 점이 있다면, 파일 내의 데이터 포인트 사이를 연결하는 방식도 지정해 줘야 한다는 것입니다. 이것은 with 또는 w 옵션을 통해서 할 수 있는데, 예컨대 각 점들을 직선으로 연결하고 싶다면 w line 을 추가해 주면 됩니다. 만약 이걸 지정하지 않으면, 데이터 포인트들이 불연속적인 점으로 나타나게 됩니다.
마지막으로 짚고 넘어갈 점이라면, 샾(#) 기호로 시작되는 줄은 주석으로 간주되어 그래프에 반영되지 않는다는 것입니다.
히스토그램
곡선 또는 직선 그래프 대신 히스토그램으로 데이터를 나타낼 수도 있습니다. w histep 옵션을 주면, 데이터 포인트들이 히스토그램 방식으로 연결되어 그래프에 나타날 것입니다.
세번째 예시입니다.
GNUPLOT 스크립트
gp_example2D_03.txt [다운로드]
데이터 파일
gp_ex2D_data03.txt [다운로드]
서로 다른 평균값을 가진 푸아송 분포를 그래프로 그린 것입니다.