R语言pdf输出中文乱码情况比较常见,一般来说我们调整好文件读入编码格式(如:UTF-8)就能解决编码问题导致的中文乱码,对于ggplot2输出图片当我们设置好字体等一些列信息时发现像png、tiff等格式依旧可以正常显示,可以对于pdf就不行(主要是因为这几种图片格式不同,前者属于位图,后者绘制的是矢量图)。

这里主要介绍使用showtext包,它能够支持更多的字体格式和更多的图形设备,可以使用各种类型的字体(TrueType,OpenType,Type 1,Web字体等),如下是showtext的工作原理:

搜索引擎给出一大堆东西,都是抄过来超过去,建议遇见此类问题可以查看相应的包寻求解决方案。

library(showtext)
## 添加字体包
font_add("heiti", "simhei.ttf")
font_add("constan", "constan.ttf", italic = "constani.ttf")

library(ggplot2)
p = ggplot(NULL, aes(x = 1, y = 1)) + ylim(0.8, 1.2) +
    theme(axis.title = element_blank(), axis.ticks = element_blank(),
          axis.text = element_blank()) +
    annotate("text", 1, 1.1, family = "heiti", size = 15,
             label = "\u4F60\u597D\uFF0C\u4E16\u754C") +
    annotate("text", 1, 0.9, label = 'Chinese for "Hello, world!"',
             family = "constan", fontface = "italic", size = 12)

## 自动加载
showtext_auto()

## 当前设备显示
x11()
print(p)
dev.off()

## PDF 设置
pdf("showtext-example-3.pdf", 7, 4)
print(p)
dev.off()

## PNG 设备
ggsave("showtext-example-4.png", width = 7, height = 4, dpi = 96)

## 关闭
showtext_auto(FALSE)

主要是下面代码内容:

  library(showtext)
  showtext_auto(enable = TRUE)
  font_add(family = "YaHei", regular = "msyh.ttc") 
  # 后面可以在ggplot2中加上如下代码即可
  # theme(text = element_text(family="YaHei"))

字体下载:

1.https://www.google.com/fonts

2.https://github.com/adobe-fonts/source-han-san

参考资料:

1.https://github.com/yixuan/showtext