[AI번역] Gnuplot으로 출판 수준의 그래프 그리기

원문 게시일: 2015년 4월 20일

저자: Matt

여러 플랫폼의 대안들을 신중하게 검토한 결과, 출판 수준의 그래프를 생성하는 데 가장 적합한 소프트웨어는 Gnuplot이라는 결론을 내렸습니다. R 스위트(suite)는 통계 분석에는 훨씬 뛰어나지만, 그래프 생성 기능은 그만큼 유연하지 않고 제 눈에는 그리 예뻐 보이지 않았습니다. (솔직히 말씀드리면 저는 주로 기본 플로팅 라이브러리만을 염두에 두고 말하는 것이며, lattice나 ggplot2 같은 다른 라이브러리를 광범위하게 사용해 보지는 않았습니다.) 엑셀(Excel)로도 출판 수준의 그래프를 만들 수는 있지만 번거로운 작업이며, 무엇보다 다이어그램의 정확한 크기를 설정하거나 고해상도 이미지를 생성하기가 쉽지 않습니다.

어떤 면에서 Gnuplot의 언어 구문은 다소 구식처럼 보일 수 있지만, 일단 익히고 나면(혹은 이를 생성하는 프로그램을 작성하는 법을 배우면) 매우 강력합니다. Gnuplot의 PNG 드라이버는 결과물이 아주 훌륭하지는 않지만, Postscript와 SVG 드라이버는 매우 잘 작동합니다. 저는 특히 출판 수준의 산점도(scatter diagram)를 만들 때 이들이 유용하다는 것을 알게 되었습니다. 일반적으로 something.plt라는 파일을 만들고 여기에 gnuplot 명령어를 입력하여 실행합니다.

3인치 정사각형 정도의 EPS 파일을 생성하려면 Postscript 터미널을 사용하며 아래 명령어를 입력합니다:

코드 스니펫
set terminal postscript eps enhanced size 3in,3in
set output 'file.eps'

6~6.5인치 정사각형 정도의 Postscript 파일을 생성하려면:

코드 스니펫
set terminal postscript enhanced size 6in,6in
set output 'file.ps'

4~6인치 정사각형 정도의 SVG 파일을 생성하려면:

코드 스니펫
set terminal svg enhanced size 500,500
set output 'file.svg'

SVG 터미널은 크기 옵션에서 'in' 단위를 허용하지 않는 것으로 보이지만, SVG 세계에서는 100이 1인치와 같습니다. 저는 SVG 방식을 가장 선호하는데, 결과 그래프를 오픈소스 SVG 편집 프로그램인 잉크스케이프(Inkscape)에서 추가로 편집하거나 주석을 달 수 있기 때문입니다. 따라서 이후 설명은 SVG 드라이버 사용을 가정합니다.

SVG 터미널에서 enhanced 옵션은 중요합니다. 이를 통해 더 정교한 제목을 설정할 수 있습니다:

코드 스니펫
set encoding iso_8859_1
set title 'This is the title of the graph'
set xlabel 'Molecular weight (kDa)'
set ylabel 'Solvent-inaccessible surface area x 1000 ({\305}^2)'

^는 상첨자를, _는 하첨자를 허용하며 이는 LaTeX와 유사합니다. 비 ASCII 문자도 포함할 수 있습니다 (예: {\305}는 옹스트롬 기호).

범례(Legend/Key) 제어:

코드 스니펫
set nokey          # 범례 끄기
set key top left   # 범례를 왼쪽 상단으로

축 범위 제어:

코드 스니펫
set xrange [0:10]
set xtics 0,2,10   # 증분 단위를 2로 설정
set yrange [0:1000]

회귀 곡선과 같은 함수 추가:

코드 스니펫
f(x) = 0.039440 * x + 0.678467

이제 모든 매개변수가 설정되었으므로 plot 함수를 사용하여 실제 그래프 데이터를 생성합니다:

코드 스니펫
plot 'data1.dat' using 1:2 w p, \
     'data2.dat' using ($2/1000):($3/1000) w lp pt 13 ps 1.5 lt 1 lc -1 lw 1, \
     f(x)

w는 'with'의 약자입니다. 첫 번째 인자는 스타일로, 데이터가 어떻게 그려질지를 결정합니다:

  • points(p) - 연결되지 않은 점들

  • linespoints(lp) - 선으로 연결된 점들

기타 인자들은 다음과 같습니다:

  • pointtype(pt) - 점의 모양 제어

  • pointsize(ps) - 점의 크기 제어

  • linetype(lt) - 선의 모양(실선, 점선 등) 제어

  • linecolor(lc) - 선 및 점의 색상 제어

  • linewidth(lw) - 선의 굵기 제어

불행히도 이러한 옵션의 인자들은 특정 드라이버에 의해 정의된 임의의 숫자로 지정됩니다. SVG 드라이버의 점 모양(pointtype)은 다음과 같습니다:

  • 1: +, 2: x, 3: *, 4: 빈 사각형, 5: 채워진 사각형, 6: 빈 원, 7: 채워진 원, 13: 채워진 다이아몬드 등

SVG 선 색상(linecolor):

  • -1: 검정, 0: 회색, 1: 빨강, 2: 초록, 3: 파랑, 7: 오렌지 등

SVG 드라이버에는 실선 이외의 다른 선 모양(linetype)이 없는 것으로 보입니다(단, 이는 잉크스케이프에서 수정 가능합니다). 이것이 문제가 된다면 많은 종류의 점선을 지원하는 postscript 터미널을 사용하십시오. 터미널의 기능을 확인하는 쉬운 방법은 test 명령을 내리는 것입니다.

생성된 이미지는 잉크스케이프를 사용해 원하는 해상도의 무손실 PNG 파일로 내보낼 수 있습니다. 명령행에서도 가능합니다:

Bash
$ inkscape --export-area-drawing --export-png=file.png \
             --export-dpi=300 file.svg

ImageMagick 도구 스위트의 convert 프로그램을 사용하면 이를 TIFF나 다른 형식으로 변환할 수 있으며, 투명도를 제거하거나 테두리를 추가할 수도 있습니다:

Bash
$ convert -background "#ffffff00" -flatten -bordercolor "#ffffff00" \
            -border 50x50 input.png output.tiff

convert는 EPS 이미지를 래스터 형식으로 변환하는 데도 사용할 수 있지만, SVG를 래스터로 변환할 때는 잉크스케이프보다 결과물이 떨어질 수 있습니다.


알림: 이 글은 AI를 사용하여 번역되었습니다.

원문 링크: Publication-quality plots with Gnuplot (작성자: Matt)

댓글

가장 많이 본 글