기본적으로 \(\LaTeX\) 작성은 overleaf 웹사이트에서 수식을 작성하고 공유한다. 정규분포 등 많은 수식은 https://equplus.net/ 웹사이트에서 이미 \(\LaTeX\) 코드로 작성되어 있어 다운로드 받을 수 있다.
ggplot
수식 표기법 [1]7.2 Using Mathematical Expressions in Annotations을 참조하면 ggplot
에 수식을 넣을 수 있다. 방법은 plotmath
을 사용하는 것인데, Mathematical Annotation in R을 참조한다.
ggplot2
팩키지에 expression()
함수를 사용해서 plotmath
그래픽 수식 표기를 수월하게 진행할 수 있다.
library(tidyverse)
tibble(normal_var = rnorm(10000, mean = 0, sd = 1))
normal_tbl <-
%>%
normal_tbl ggplot(aes(normal_var)) +
geom_histogram(aes(y=..density..), bins = 50, fill ="midnightblue") +
# geom_density() +
stat_function(data = normal_tbl,
fun = dnorm,
args = list(mean = 0, sd = 1), color = "red") +
# labs(x = expression(glue::glue("{mu} = 0, {sigma} =1"))) +
labs(x = expression(paste("정규분포: ", mu, " = 0, ", sigma, " = 1"))) +
annotate("text", x = 2, y = 0.3, parse = TRUE, size = 5,
label = "frac(1, sqrt(2 * pi)) * e ^ {-x^2 / 2}") +
theme_minimal()
ggplot
그래프 [2]ggplot
그래프에 수식과 관련된 정보를 함께 표현할 경우 문자열(String), 수학 표기법, 변수 등 다양한 요소가 한번에 필요한 경우가 있다.
\(\mu\)와 \(\sigma\) 수식 표기 뿐만 아니라 변수에 넣은 값도 함께 bquote()
함수를 사용해서 ggplot
시각화를 할 수 있다.
bquote("표준정규분포: " ~ mu == .(mu_val) ~ "그리고" ~ sigma^2 == .(sigma_val)))
0
mu_val <- 1
sigma_val <-
%>%
normal_tbl ggplot(aes(normal_var)) +
geom_histogram(aes(y=..density..), bins = 50, fill ="midnightblue") +
stat_function(data = normal_tbl,
fun = dnorm,
args = list(mean = 0, sd = 1), color = "red") +
# labs(x = expression(glue::glue("{mu} = 0, {sigma} =1"))) +
labs(x = expression(paste("정규분포: ", mu, " = 0, ", sigma, " = 1")),
title = bquote("표준정규분포: " ~ mu == .(mu_val) ~ "그리고" ~ sigma^2 == .(sigma_val))) +
annotate("text", x = 2, y = 0.3, parse = TRUE, size = 5,
label = "frac(1, sqrt(2 * pi)) * e ^ {-x^2 / 2}") +
theme_minimal()
수식을 \(\LaTeX\)으로 표현하면 이를 latex2exp
팩키지를 사용해서 곧장 ggplot
시각화에 사용할 수도 있다. latex2exp
는 \(\LaTeX\) 문자열을 plotmath
표현식으로 변환하는 역할을 한다.
library(latex2exp)
library(Hmisc)
%>%
normal_tbl ggplot(aes(normal_var)) +
geom_histogram(aes(y=..density..), bins = 50, fill ="midnightblue") +
stat_function(data = normal_tbl,
fun = dnorm,
args = list(mean = 0, sd = 1), color = "red") +
labs(x = TeX("모수: $\\mu = 0, \\sigma^2 = 1 "),
title = TeX("$X \\sim \\mathcal{N}(\\mu,\\,\\sigma^{2})$"))+
theme_minimal()
일부 \(\LaTeX\) 코드만 변환이 가능해서 아래 \(\LaTeX\) 코드가 모두 변환이 된 것이 아니다. latex2exp_supported()
사용하면 적용가능한 \(\LaTeX\) 기호를 확인하고 사용한다.
\(X \sim \mathcal{N}(\mu,\,\sigma^{2})\)
latex2exp_supported()
[1] "\\%" "\\," "\\;" "\\aleph"
[5] "\\approx" "\\ast" "\\bar" "\\bigcap"
[9] "\\bigcup" "\\bullet" "\\cdot" "\\cdots"
[13] "\\clubsuit" "\\cong" "\\degree" "\\diamondsuit"
[17] "\\div" "\\dot" "\\equiv" "\\exists"
[21] "\\forall" "\\frac" "\\geq" "\\hat"
[25] "\\heartsuit" "\\Im" "\\in" "\\infty"
[29] "\\int" "\\LaTeX" "\\lbrack" "\\ldots"
[33] "\\leftarrow" "\\Leftarrow" "\\leq" "\\lim"
[37] "\\mathbf" "\\mathit" "\\mathrm" "\\neg"
[41] "\\neq" "\\normalsize" "\\notin" "\\nsubset"
[45] "\\oplus" "\\oslash" "\\otimes" "\\overset"
[49] "\\partial" "\\perp" "\\pm" "\\prime"
[53] "\\prod" "\\propto" "\\rbrack" "\\Re"
[57] "\\rightarrow" "\\Rightarrow" "\\sim" "\\small"
[61] "\\spadesuit" "\\sqrt" "\\subset" "\\subseteq"
[65] "\\sum" "\\supset" "\\supseteq" "\\surd"
[69] "\\TeX" "\\textbf" "\\textit" "\\tilde"
[73] "\\times" "\\tiny" "\\underline" "\\vee"
[77] "\\wedge" "\\widehat" "\\widetilde" "\\wp"
\(\lambda \exp(-\lambda x)\)
1. Chang W. R graphics cookbook: Practical recipes for visualizing data. " O’Reilly Media, Inc."; 2012.
2. Rinker T. Math notation for r plot titles: Expression, bquote, & greek letters. 2018. https://trinkerrstuff.wordpress.com/2018/03/15/2246/.
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com