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

Quarto转PDF时ggplot2轴标签δ与千分号‰显示异常问题

解决Quarto中ggplot2轴标签千分号(‰)PDF导出异常的问题

问题本质

你遇到的‰显示为省略号的问题,核心是LaTeX默认的pdfLaTeX引擎对Unicode字符支持有限,即便指定了Arial Unicode MS字体,ggplot的expression()函数会触发LaTeX表达式渲染,导致‰无法被正确解析。另外注意到你代码里x、y轴标签都写了δ¹⁵N,应该是x轴为δ¹³C的笔误,下面会一并修正。

解决步骤

  • 放弃expression(),直接用Unicode字符定义标签:避免LaTeX解析表达式时的字符兼容问题,直接写δ¹³C (‰)这类原生Unicode文本。
  • 切换Quarto的PDF引擎为XeLaTeX/LuaLaTeX:这两个引擎对Unicode字体支持更完善,能正确识别并渲染‰和希腊字母。
  • 明确指定ggplot主题的字体:确保轴标签、标题等元素使用你指定的Arial Unicode MS字体。

修改后的完整代码

首先是Quarto文档的YAML配置:

---
title: "同位素组成月分布Biplot"
format:
  pdf:
    engine: xelatex
    mainfont: "Arial Unicode MS"
    fontsize: 12pt
---

然后是R绘图代码:

library(readxl)
library(dplyr)
library(ggplot2)

# 读取数据并过滤异常值(合并为一次过滤更简洁)
sia_data_plot <- read_excel("~/filepath/doc.xlsx") %>%
  filter(d13C < max(d13C), d15N < max(d15N))

# 绘图
sia_month_facet <- ggplot(data = sia_data_plot, aes(x = d13C, y = d15N)) +
  geom_point(aes(color = Tissue, shape = Transect), size = 3) +
  # 仅保留一次facet_wrap,指定月份展示顺序
  facet_wrap(~factor(Month, levels=c('March', 'June', 'August', 'October'))) +
  scale_colour_brewer(type = "seq", palette = "Dark2") +
  ggtitle("Isotopic composition biplot by month") +
  # 直接用Unicode字符写轴标签,无需expression
  labs(x = "δ¹³C (‰)", y = "δ¹⁵N (‰)") +
  theme_grey() +
  # 强制指定字体,确保字符渲染一致
  theme(
    axis.title.x = element_text(family = "Arial Unicode MS"),
    axis.title.y = element_text(family = "Arial Unicode MS"),
    plot.title = element_text(family = "Arial Unicode MS")
  )

print(sia_month_facet)

额外提示

  • 原代码中两次调用facet_wrap,后面的会覆盖前面的设置,所以只保留指定月份顺序的那一行即可。
  • 如果你的系统找不到Arial Unicode MS字体,可以替换为其他支持希腊字母和千分号的Unicode字体,比如"Noto Sans"。
  • XeLaTeX引擎是解决问题的关键,pdfLaTeX对非ASCII字符的支持先天不足,必须切换到Unicode友好的引擎才能解决‰渲染异常。

内容的提问来源于stack exchange,提问作者AlexaQuinoa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:43:24