将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
相关产品推荐
相关产品推荐

