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

将ggplot对象保存为PDF时文本显示异常的解决办法

ggplot2保存PDF文本乱码的解决办法

核心原因

PDF是矢量文件格式,R默认的PDF设备对部分字体(尤其是非英文或特殊字符)支持不足;而PNG是位图格式,直接调用系统渲染字体,所以显示正常。以下是几种实用解决方法:


方法1:用ggsave直接保存PDF(推荐)

ggsave是ggplot2专属的保存函数,对PDF适配性更好,还能通过Cairo设备优化字体渲染:

# 英文场景用Arial,中文场景替换为对应字体(如"SimHei"、"PingFang SC")
ggsave("test_figure.pdf", test_figure, device = cairo_pdf, family = "Arial")

方法2:在pdf()函数中指定字体

如果习惯用基础绘图的保存方式,直接在pdf()里指定系统支持的字体即可:

# 根据需求替换family参数
pdf("test_figure.pdf", family = "Arial")
print(test_figure)
dev.off()

方法3:在ggplot主题中统一设置字体

提前在theme()里指定全局字体,确保所有文本都使用支持的字体:

test_figure <- ggplot(aes(y=parameter, x=LUT, color=Climate), data=data)+
  geom_point()+
  scale_colour_manual(values=c("amb" = "#007089", "fut" = "#60c3d9"))+
  stat_summary(geom = "point", fun.y = "mean", size = 5, shape = 17)+
  stat_summary(fun.data = mean_se, geom = "errorbar")+
  ylab("test_lab")+
  theme(
    text = element_text(family = "Arial", size = 22), # 全局指定字体
    plot.title = element_text(size=25),
    axis.text.y = element_text(size=18),
    axis.text.x = element_text(size=18),
    axis.title.y=element_text(size=17)
  )

# 之后用ggsave或pdf()保存均可
ggsave("test_figure.pdf", test_figure)

方法4:用extrafont包加载系统字体

如果需要使用特殊字体(如中文黑体),可以用extrafont导入系统字体库:

# 首次使用需安装并导入字体
install.packages("extrafont")
library(extrafont)
font_import() # 扫描系统字体,耗时较长,仅需运行一次
loadfonts()

# 绘图时指定导入的字体
test_figure <- ggplot(...) +
  theme(text = element_text(family = "SimHei")) # 中文场景示例

ggsave("test_figure.pdf", test_figure)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:45:33