R Graphics
R Graphics
1. 그래픽 디바이스 ¶R에서는 다음과 같은 그래픽 디바이스를 사용할 수 있다.
> plot(dnorm, -3, 3) 파일로 저장하려면 그래픽 디바이스를 지정해야 한다. PostScript 파일로
출력하고 싶다면 postscript 명령을 이용하면 된다. 간단하게는 출력
파일 이름만 지정해 주면 된다. pdf, pictex, 등등도 마찬가지이다.
> postscript("dnorm.ps") > plot(dnorm, -3, 3) > dev.off() 실제로 사용하려면 다음처럼 그림의 크기와 글꼴의 크기를 지정해서 EPS로
저장한 후 다른 문서에 삽입하거나 하게 될 것이다.
> postscript("plot1.eps", onefile=FALSE, horizontal=FALSE, height=4, width=4, pointsize=8) 자세한 사용법을 알고 싶을 때는 help 명령을 이용하거나 명령어 앞에
물음표(?)를 붙이면 된다.
> help("postscript") > ?postscript 1.1. Cairo Graphics Device ¶카이로 디바이스 패키지를 설치하면 카이로 벡터 그래픽스 라이브러리를
이용하여 출력할 수 있다. screen, pdf, ps, svg, png로 출력할
수 있다.
설치는 Debian 계열에서
$ apt-get install r-cran-cairodevice 사용하려면 우선
cairoDevice 라이브러리를 로드해야 한다.
> library(cairoDevice) 이제 그래프를 하나 그려보자.
> plot(dnorm, -3, 3) PDF로 출력할 때는 다음처럼
Cairo_pdf 명령을 사용하면 된다. 다른
포맷도 마찬가지이다. help("Cairo") 를 읽어보면 사용법이 나온다.
> Cairo_pdf("plot.pdf") > plot(dnorm, -3, 3) > dev.off() 2. R 그래픽에 한글 쓰기 ¶R 그래픽은 오랫동안 서유럽어에서 사용되는 문자만 지원해 왔다.
현재에도 따로 설정하지 않는 한 서유럽어의 문자만 제대로 출력된다.
그 이외의 중앙유럽어의 문자들, 끼릴 문자와 CJK 폰트 등 소위
"비표준" 폰트의 지원에 관한 전반적인 정보는 다음 문서를 참조.
2.1. 예제 ¶설명을 위해 다음과 같은 예제 자료를 사용하겠다. 컬럼은 탭으로
구분되어 있고 파일이름은 "baseball.txt"라고 하자.
구단 승률 팀타율 출루율 팀방어율 현대 0.628 0.264 0.347 3.26 한화 0.619 0.255 0.329 3.34 삼성 0.610 0.249 0.332 3.05 SK 0.512 0.265 0.343 3.63 기아 0.500 0.253 0.323 3.29 두산 0.425 0.235 0.303 3.07 LG 0.381 0.254 0.317 4.47 롯데 0.317 0.218 0.293 3.63
> bb <- read.table("baseball.txt", header=T) > x <- bb[2:5] > rownames(x) < bb[,1] 일단 화면으로 출력해 보자. 다음 명령을 내리면 산점도 행렬을 그려주는데
컬럼명이 한글로 되어 있어서 깨져서 나타날 것이다.
> pairs(x) 2.2. Cairo ¶기본적으로 제공되는 x11, pdf, pictex 등으로 한글을
출력하려면 방법이 없는 것은 아니지만 상황에 따라
여러가지 문제가 생긴다.
Cairo 그래픽 디바이스를 이용하면 문제가 쉽게 해결된다.
사용하려면 cairoDevice 패키지가 설치되어 있어야 하고,
R을 시작한 후에
cairoDevice 라이브러리를 로드해야
한다.
> library(cairoDevice) 더 이상 필요한 것은 없다. 다음처럼 명령을 내리면
GTK+ 창이 뜨고 한글을 포함한 그래픽이 자연스럽게
그려질 것이다.
> pairs(x) PDF, PS, SVG, PNG 등으로 출력하는 경우에는
Cairo_pdf , Cairo_ps , Cairo_svg , Cairo_png 등의 명령어를 이용할 수 있다.
> Cairo_pdf("plot.pdf") > pairs(x)출력 결과: bb-scatterplot-matrix-cairo.pdf (13.1 KB) 위 문서를 열어보면 화면(
screen )으로 출력할 때보다 글자 크기가 크게 찍힌 것을 알 수 있다. 기본값은
10포인트로 설정되어 있지만, 파일(pdf , ps , png , svg )로 출력할 때는 글자 크기가 기대한
것보다 크게 찍히는 문제가 있다.
위의 경우에는 그다지 보기 싫지 않지만 글자 크기가
정해진 것 보다 크게 찍히기 때문에 글자가 겹쳐서
문제가 되는 경우도 있다. 다음처럼 7포인트로 지정해
주어야 10포인트 정도 크기로 찍힌다.
> Cairo_pdf("plot.pdf", pointsize=7) > plot(x) > dev.off() 출력 결과: bb-scatterplot-matrix-cairo-7p.pdf (13.33 KB)
문자도 벡터 그래픽으로 바뀌어 찍히기 때문에 출력 포맷을 어떤 것으로 해도 폰트 문제는 생기지 않는다.
2.3. PDF ¶PDF 그래픽에 한글을 쓰려면 다음과 같이 pdf 명령에 font family를
지정해 주면 된다. 물론, 여기서는 모두 생략했지만, 그래픽의 가로 세로 크기,
폰트 크기 등도 필요에 따라 적당하게 지정해 주어야 한다.
> pdf("plot.pdf", family="Korea1deb") > pairs(x) > dev.off() 다음과 같은 결과를 얻을 수 있다:
bb-scatterplot-matrix.pdf (17.8 KB)
이렇게 만들어진 PDF 그래픽에는 글꼴이 임베드되지 않기 때문에 한글을
제대로 디스플레이하고 출력하려면 필요한 폰트가 설치되어 있어야 한다.
문제없이 사용하기 위해서는 Adobe Reader를 사용하는 방법밖에 없다.
2.4. X11 ¶화면(X11)으로 출력할 때도 폰트를 지정해 주면 한글을 사용할 수 있다.
기본적으로는 Adobe Helvetica를 사용하도록 되어 있는데 서유럽어의 문자만
찍힌다.
다음처럼 폰트를 대우 고딕으로 지정해 주면 한글이 제대로 나타난다.
> X11(fonts=c("-daewoo-gothic-%s-%s-*-*-%d-*-*-*-*-*-*-*","-adobe-symbol-medium-r-*-*-%d-*-*-*-*-*-*-*"),pointsize=20) > pairs(x) xfonts-baekmuk 패키지를 설치했다면 다음처럼 백묵 굴림을 사용할 수도 있다.
> X11(fonts=c("-baekmuk-gulim-%s-%s-*-*-%d-*-*-*-*-*-iso10646-1","-adobe-symbol-medium-r-*-*-%d-*-*-*-*-*-*-*")) > pairs(x)
한글이 보이기는 하지만 심각한 문제가 있다. 스크린샷에 나타난 것처럼 숫자와 영문이 모두 한글로 치환되어 나타난다. 2.5. PicTeX ¶R 그래픽을 텍 소스로 출력해 주는 기능도 있다. pictex 디바이스를 사용하면
된다.
다음처럼 하면 bb-scatterplot-matrix.tex 라는 파일이 생긴다. 파일 인코딩은
UTF-8으로 유니코드 문자들이 모두 제대로 출력된다.
> pictex("bb-scatterplot-matrix.tex") > pairs(x) > dev.off() 이렇게 만들어진 파일을 다음처럼 LaTeX 문서의 원하는 위치에 넣어주면 된다.
\documentclass{article}
\usepackage{pictex} \usepackage{kotex} \usepackage{graphicx} \begin{document} \begin{figure}[h] \centerline{\input{bb-scatterplot-matrix.tex}} \caption{...} \end{figure} \end{document} 한글을 포함해서 유니코든 문자들을 LaTeX을 이용해서 깔끔하게 찍을 수 있다.
폰트 임베딩 문제도 사라진다. 필요하다면, LaTeX 문서의 원하는 위치에 직접
넣는 것이 아니라 해당 그래픽만 EPS나 PDF로 만들어서 사용할 수도 있다.
bb-scatterplot-matrix-pictex.pdf (25.73 KB)
문제는 한글 문자열의 위치 계산이 제대로 되지 않아 기대되는 위치에서 약간씩
벗어난다는 것이다. 위의 예를 보면 한글 레이블이 상자의 한가운데 위치하지
않고 약간씩 왼쪽 위로 치우쳐진 것을 볼 수 있다. 이 예제의 경우에는 무리없이
사용할 수 있고 문제가 되는 것이 몇개 되지 않으므로 수작업로 조정해 주어도
된다. 하지만 레이블의 개수가 많고 위치가 중요한 경우에는 사용하기 어렵다.
|
You can do very well in speculation where land or anything to do with earth is concerned. |