查看原文
其他

让你的图片中文不再乱码!

阿越就是我 医学和生信笔记 2023-02-25
关注公众号,发送R语言,获取学习资料!


由于编码的问题,导致R和Rstudio会遇到很多字体相关的问题,而且都不太容易解决,比如当你使用RMarkdown写中文文档时,导出就会遇到中文乱码问题。再比如如果你画的图有中文,那么导出为PDF时也会遇到乱码!

就很烦!

谢益辉大神的showtext包就是专治这些疑难杂症的。

安装

install.packages("showtext")

使用

使用谷歌字体

(需要科学网络)。

library(showtext)
## 载入需要的程辑包:sysfonts
## 载入需要的程辑包:showtextdb

font_add_google("Gochi Hand""gochi")
font_add_google("Schoolbell""bell")
font_add_google("Covered By Your Grace""grace")
font_add_google("Rock Salt""rock")

在画图之前先提前设置好,这样后面就会自动使用字体。

showtext_auto()
# 也可以使用showtext_begin()和showtext_end()精确控制某一段代码

# 设置图形设备分辨率,只有位图 需要,默认96
showtext_opts(dpi = 96)

下面就是画图:

set.seed(123)
x <- rnorm(10)
y <- 1+x+rnorm(10, sd = 0.2)
y[1] <- 5
mod <- lm(y ~ x)

op <- par(cex.lab = 2, cex.axis = 1.5, cex.main = 2)

plot(x, y, pch = 16, col = "steelblue",
     xlab = "X variable", ylab = "Y variable", family = "gochi")
grid()
title("Draw Plots Before You Fit A Regression", family = "bell")
text(-0.54.5"This is the outlier", cex = 2, col = "steelblue",
     family = "grace")
abline(coef(mod))
abline(11, col = "red")
par(family = "rock")
text(11, expression(paste("True model: ", y == x + 1)),
     cex = 1.5, col = "red", srt = 20)
text(02, expression(paste("OLS: ", hat(y) == 0.79 * x + 1.49)),
     cex = 1.5, srt = 15)
legend("topright", legend = c("Truth""OLS"), col = c("red""black"), lty = 1)
plot of chunk unnamed-chunk-4
par(op)

这幅图你保存成pdf格式,也不会出现乱码,但是你不用这个包就会出现乱码。

使用系统自带字体

library(showtext)
## 使用Windows自带字体
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.81.2) +
    theme(axis.title = element_blank(), axis.ticks = element_blank(),
          axis.text = element_blank()) +
    annotate("text"11.1, family = "heiti", size = 15,
             label = "\u4F60\u597D\uFF0C\u4E16\u754C") +
    annotate("text"10.9, label = 'Chinese for "Hello, world!"',
             family = "constan", fontface = "italic", size = 12)

## 自动设置好
showtext_auto()

## 打印在屏幕上
x11()
print(p)
plot of chunk unnamed-chunk-5
dev.off()
## png 
##   2

## PDF
pdf("showtext-example-3.pdf"74)
print(p)
dev.off()
## png 
##   2

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

## 用完了关闭
showtext_auto(FALSE)

完美,一切都像想象中那样美好!中文字题也完美输出了!

以后如果遇到输出图片乱码问题,记得使用这个包!


以上就是今天的内容,希望对你有帮助哦!欢迎点赞、在看、关注、转发


欢迎关注公众号:医学和生信笔记

医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!

往期推荐

R语言和医学统计学(合辑)

R语言机器学习R包:mlr3(合辑)

超详细的R语言热图之complexheatmap系列8(完结篇)

超详细的R语言热图之complexheatmap系列07

超详细的R语言热图之complexheatmap系列6

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存