如何在RMarkdown的ggplot中插入希腊字母并成功编译为PDF文档
问题解决方案
问题根因
- 报错是因为PDF编译依赖LaTeX链路,直接传递Unicode希腊字符
\u03C1时,stringi包在编码转换阶段无法识别非ASCII字符序列,抛出无效UTF-8字节错误 - 直接写LaTeX格式的
$\rho$不生效,是因为ggplot默认的labeller不会主动解析LaTeX语法,只会把内容当做普通字符串处理
解决方案
使用ggplot内置的plotmath表达式解析能力渲染希腊字母,无需引入额外依赖,修改后的完整可运行代码如下:
--- title: "TEST" output: pdf_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(ggplot2)
set.seed(42) n = 100 r = c(-.999, -.75, -.5, -.25, 0, .25, .5, .75, .999) DATA = numeric() for(i in 1:length(r)){ X = round(MASS::mvrnorm(n = n, mu = c(0,0), Sigma = matrix(c(1,r[i],r[i],1),2,2)),4) DATA = rbind(DATA,cbind(X,r[i])) } DATA = data.frame(DATA) colnames(DATA) = c("Variable1", "Variable2", "Correlation") # 生成plotmath可解析的标签,双等号为plotmath语法要求,渲染后显示为单等号 P.labs = paste0("rho == ", r) names(P.labs) = as.character(r) ggplot(data = DATA, aes(x = Variable1,y = Variable2)) + geom_point() + # 指定labeller解析表达式,自动渲染希腊字母 facet_wrap(vars(Correlation), ncol = 3, labeller = labeller(Correlation = as_labeller(P.labs, default = label_parsed)))
### 补充说明 如果之前没有安装LaTeX环境,运行以下代码即可安装R官方推荐的轻量编译环境: `install.packages("tinytex"); tinytex::install_tinytex()` 如果文档包含中文内容,可在yaml的输出配置中添加`latex_engine: xelatex`避免中文乱码。 内容的提问来源于stack exchange,提问作者POC
相关产品推荐
相关产品推荐

