LaTeX이라고 쓰고 /레이텍/ 또는 /라텍/이라고 읽는 논문 문서 저작 도구가 있습니다.
LaTeX를 쓰면 무엇보다 원하는 대로 수식을 넣을 수 있다는 게 제일 큰 장점입니다.
예컨대 '롯데 '가을야구' 진출 확률, 이항분포로 알아보자!' 포스트에 등장하는 수식을 쓰면서 사용한 도구가 바로 LaTeX입니다.
LaTeX는 원래 이동 가능 문서 형식(PDF) 저작 도구에 가까운 게 사실이지만 (거의) 똑같은 공식으로 다양한 문서 형태를 만들 수 있다는 장점도 있습니다.
R에서도 latex2exp 패키지를 통해 LaTeX 문법을 지원하고 있습니다.
지금부터 latex2exp 패키지를 가지고 그래프 위에 LaTeX 수식을 작성하는 방법을 살펴 보도록 하겠습니다.
늘 그랬든 제일 먼저 할 일은 tidyverse 패키지 (설치하고) 불러오기.
#install.packages('tidyverse')
library('tidyverse')
## -- Attaching packages ------------------------------------------------------------------------------------------------------- tidyverse 1.3.0 --
## √ ggplot2 3.3.2 √ purrr 0.3.4 ## √ tibble 3.0.3 √ dplyr 1.0.2 ## √ tidyr 1.1.2 √ stringr 1.4.0 ## √ readr 1.3.1 √ forcats 0.5.0
## -- Conflicts ---------------------------------------------------------------------------------------------------------- tidyverse_conflicts() -- ## x dplyr::filter() masks stats::filter() ## x dplyr::lag() masks stats::lag()
원래 R에서는 expression() 함수를 통해 수식 입력을 지원합니다.
예를 들어 그래프 위에 그냥 'x^2'를 쓰라고 입력하면 정말 x^2를 표시하지만
ggplot() +
annotate(
geom = 'text',
x = 0, y = 0,
size = 12,
label = 'x^2'
)
이 x^2를 expresison() 함수 안에 넣으면 $x^2$를 나타냅니다.
ggplot() +
annotate(
geom = 'text',
x = 0, y = 0,
size = 12,
label = expression(x^2)
)
## Warning in is.na(x): is.na() applied to non-(list or vector) of type ## 'expression'
이러면 '패키지가 따로 필요한 이유가 있나'하고 생각하시는 분도 계실 터.
LaTeX 자체가 낯선 분이라면 이런 생각이 잘못된 것도 전혀 아닙니다.
그러나 이 expression() 함수를 활용해 수식을 쓰려면 이 함수에 맞는 문법을 처음부터 다시 배워야 합니다.
반면 LaTeX는 사실상 '업계 표준'이라고 할 만큼 널리 쓰고 있습니다.
그래서 LaTeX 문법을 지원하는 패키지를 따로 만든 겁니다.
이제 latex2exp 패키지를 (설치하고) 불러오도록 하겠습니다.
#install.packages('latex2exp')
library('latex2exp')
LaTeX 문법으로 수식을 적을 때는 TeX() 함수 안에 공식을 적으시면 됩니다.
ggplot() +
annotate(
geom = 'text',
x = 0, y = 0,
size = 12,
label = TeX('x^2')
)
## Warning in is.na(x): is.na() applied to non-(list or vector) of type ## 'expression'
이 정도 수식을 표현할 때는 사실 그냥 expression() 함수를 써도 충분합니다.
난도를 높이는 창원에서 'R로 4할 타자 출현 확률 알아보기(feat. dbinom(), pbinom())' 포스트에 썼던 수식을 그대로 옮겨 보겠습니다.
ggplot() +
annotate(
geom = 'text',
x = 0, y = 0,
size = 12,
label = TeX("$_5C_2 (0.3)^2(1-0.3)^3 = 0.3087$")
)
## Warning in is.na(x): is.na() applied to non-(list or vector) of type ## 'expression'
이렇게 원래 썼던 수식 코드를 있는 그대로 붙여 넣으면 똑같은 결과를 얻을 수 있다는 게 이 패키지를 써야 하는 또 다른 이유입니다.
마찬가지로 인터넷에서 찾은 공식을 그대로 붙여 넣어도 똑같은 결과를 얻을 수 있습니다.
단, LaTeX에서는 원래 \ 뒤에 바로 동사(verb)라고 부르는 표현을 입력하지만 R에서는 \를 하나 더 써서 \\ 다음에 써야 합니다.
R에서는 텍스트 안에서 줄을 바꿀 때 '\n'이라고 쓰는 것처럼 \를 '이스케이프 문자'로 쓰고 있기 때문입니다.
ggplot() +
annotate(
geom = 'text',
x = 0, y = 0,
size=8,
label = TeX("$\\sum_{i=0}^n i^2 = \\frac{(n^2+n)(2n+1)}{6}$")
)
## Warning in is.na(x): is.na() applied to non-(list or vector) of type ## 'expression'
물론 그래프 안에만 수식을 적을 수 있는 건 아닙니다.
그래프 제목이나 축 제목 같은 곳에도 수식을 써넣을 수 있습니다.
tibble(x=seq(1, 10, 0.1)) %>%
mutate(y=log10(x)) %>%
ggplot(aes(x=x, y=y)) +
geom_line() +
labs(title=TeX('$y = \\log_{10}x$'),
subtitle=TeX('$ 0 \\leq x \\leq 10$'))
## Warning in is.na(x): is.na() applied to non-(list or vector) of type ## 'expression'
사실 우리가 흔히 쓰는 LaTeX 문법과 latex2exp 패키지에서 쓰는 문법 사이에 살짝 차이가 나기도 합니다.
≤ 기호는 원래 \le로 표시하는데 latex2exp에서는 \leq라고 써서 살짝 헤맸습니다.
원래 알고 계신 LaTeX 문법이 통하지 않을 때는 아래 코드를 통해 문법을 확인할 수 있습니다.
latex2exp_supported(plot=TRUE)
또 예제를 확인하고 싶으실 때는 아래 코드를 쓰시면 됩니다.
latex2exp_examples()
## [1] TRUE
LaTeX 문법에 대해 조금 더 알아보고 싶으신 분은 이 위키피디아 페이지가 도움이 될 수 있습니다.
그럼 모두들 Happy Charting!
댓글,