R语言-出图时的中英文字体解决方案

本文介绍如何在R中使用showtext和Cairo包实现中文字符的添加,包括showtext包的字体设置和Cairo包的pdf渲染示例,帮助读者解决中文显示问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在某些时候,需要在 R 画图中添加中文,但是默认情况下,R 对中文的支持不好。

方案1- showtext

这里推荐一个showtext的 R 包。如果需要将含有中文字体的图形保存为 pdf 文件,可以使用下面讲到的方案,最新版的showtext已经支持了ggplot2,推荐使用此种方案。

这样,在你写的 R 代码中,开头添加:

library(showtext)
showtext_auto(enable=True)    # 表示之后用上同样的字体
font_add("kaishu", "simkai.ttf") # 如果系统已经安装了该字体,可以通过这种方式调用
font_add('SimSun', regular = '/Library/Fonts/Microsoft/SimSun.ttf') # 添加字体, 必须给定指定的字体的位置
#如果你使用的是 Mac,可以打开 font book,查找你想要字体的位置。如 SimSun 字对应于 /Library/Fonts/Microsoft/SimSun.ttf 文件。
#如果你使用的是 Linux,字体应该位于 /usr/share/fonts  目录下。

#例子
server-bash@ecs-steven 22:23:35 /home/shenweiyan
$ fc-list |grep SimSun
/usr/share/fonts/chinese/simsun.ttc: NSimSun,新宋体:style=Regular
/usr/share/fonts/chinese/simsun.ttc: SimSun,宋体:style=Regular

使用 showtext 包在绘图钟显示中英文

library(showtext)
showtext_auto(enable=True)
font_add('SimSun', "simsun.ttc")

set.seed(123)

## For now we are using a device functions to draw axis labels
plot(1, xlim = c(-3, 3), ylim = c(-3, 3), type = "n")

## Then turn showtext on and draw some characters
showtext_begin()

text(runif(100, -3, 3), runif(100, -3, 3), 
     intToUtf8(round(runif(100, 20200, 30000)), multiple=TRUE), 
     col=rgb(runif(100), runif(100), runif(100), 0.5 + runif(100)/2), 
     cex=2, family="SimSun")

title("随机汉字", family="SimSun")

showtext_end()

方案2-Cairo

这个专门出pdf以及渲染pdf的包就不过多介绍了,直接看代码

library(Cairo)
CairoPDF()
plot(1:10,1:10,type="n")
text(2,10,"宋体",family="SimSun")
text(2,8,"黑体",family="SimHei")
text(2,6,"楷体",family="KaiTi_GB2312")
text(2,4,"隶书",family="LiSu");
text(2,2,"幼圆",family="YouYuan")
text(6,10,"Arial",family="Arial")
text(6,8,"Times New Roman",family="Times New Roman")
text(6,6,"Courier New",family="Courier New")
text(6,4,"Consolas",family="Consolas")
text(6,2,"Symbol",family="Symbol")
dev.off()

参考链接:中英文字体解决

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值