You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:06:03