R使用ggplot2导出PDF时U+1xxxx类Unicode字符不显示及导出Word方案求助
解决方法
以下两种路径可满足需求,按需选择即可:
路径1:修复PDF导出乱码问题
此前使用showtext不生效是因为未指定支持U+1xxxx区段Unicode字符的字体,Windows系统自带的Segoe UI Emoji已支持该类emoji字符,按以下步骤调整代码即可:
- 第一步:安装并加载所需包
install.packages(c("ggplot2", "showtext"), quiet = TRUE) library(ggplot2) library(showtext)
- 第二步:注册支持emoji的字体,开启showtext渲染
# 注册Windows自带的Segoe UI Emoji字体 font_add("segoe_emoji", regular = "seguiemj.ttf") # 开启showtext全局渲染 showtext_auto() # 设置绘图默认字体为带emoji支持的字体 theme_update(text = element_text(family = "segoe_emoji"))
- 第三步:导出PDF
cairo_pdf("plot_fixed.pdf", width = 7, height = 5) ggplot(mtcars, aes(x=cyl, y=mpg)) + geom_point() + ggtitle("Temperature range \U1F321") dev.off()
导出后的PDF插入Word即可同时保留清晰度和正常字符显示。
路径2:直接导出高分辨率内容到Word(无需中转PDF)
如果不想处理PDF字体适配问题,可选以下两种更简便的方案,均能同时保留高分辨率和字符正常显示:
方案A:导出高分辨率PNG
此前导出图片分辨率低是未指定dpi参数,设置dpi≥300即可满足印刷级清晰度:
png("plot_highres.png", width = 2100, height = 1500, res = 300) ggplot(mtcars, aes(x=cyl, y=mpg)) + geom_point() + ggtitle("Temperature range \U1F321") dev.off()
直接将生成的PNG插入Word即可。
方案B:直接插入矢量图到Word
使用officer包可直接将ggplot矢量图插入Word文档,全程无需导出中间文件,适配性最高:
install.packages(c("officer", "rvg"), quiet = TRUE) library(officer) library(rvg) # 新建Word文档 doc <- read_docx() # 将ggplot转为矢量图插入文档 doc <- body_add_vg(doc, code = print( ggplot(mtcars, aes(x=cyl, y=mpg)) + geom_point() + ggtitle("Temperature range \U1F321") )) # 保存Word文档 print(doc, target = "result.docx")
生成的Word文档内图表为矢量格式,放大不会模糊,字符显示完全正常。
内容的提问来源于stack exchange,提问作者Darren LSH
相关产品推荐
相关产品推荐

