编者荐语:
昨天美格基因向大家分享了WGCNA的实用干货,今天趁热打铁,给大家分享R语言画图中文字体解决方案!
以下文章来源于生信科技爱好者,作者沈维燕
Bio+IT爱好者社区,生物信息学与互联网科学技术分享专栏!
在某些时候,需要在R画图中添加中文,但是默认情况下,R对中文的支持不好。这里推荐一个showtext
的R包。如果需要将含有中文字体的图形保存为pdf文件,可以使用下面讲到的方案,最新版的showtext
已经支持了ggplot2
,推荐使用此种方案。
library(showtext)showtext_auto(enable=True) # 表示之后用上同样的字体font_add("kaishu", "simkai.ttf") # 如果系统已经安装了该字体,可以通过这种方式调用font_add('SimSun', regular = '/Library/Fonts/Microsoft/SimSun.ttf') #添加字体, 必须给定指定的字体的位置
如果你使用的是Mac,可以打开fontbook,查找你想要字体的位置。如SimSun字对应于 /Library/Fonts/Microsoft/SimSun.ttf 文件。
如果你使用的是Linux,字体应该位于 /usr/share/fonts 目录下。
示例
检查系统是否已经安装目标字体
shenweiyan@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 labelsplot(1, xlim = c(-3, 3), ylim = c(-3, 3), type = "n")## Then turn showtext on and draw some charactersshowtext_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()
查看当前R 的会话信息
> sessionInfo()R version 3.6.2 (2019-12-12)Platform: x86_64-conda_cos6-linux-gnu (64-bit)Running under: CentOS Linux 7 (Core)Matrix products: defaultBLAS/LAPACK: /usr/local/software/miniconda3/lib/libopenblasp-r0.3.7.solocale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=Cattached base packages:[1] stats graphics grDevices utils datasets methods baseother attached packages:[1] showtext_0.7 showtextdb_2.0 sysfonts_0.8loaded via a namespace (and not attached):[1] compiler_3.6.2
学习几个R函数
runif()
是R语言生成均匀分布随机数的函数,句法是:runif(n,min=0,max=1)
,其中>> runif(5, 0, 1) # 生成5个[0,1]的均匀分布的随机数[1] 0.5993 0.7391 0.2617 0.5077 0.7199 > runif(5) # 默认生成5个[0,1]上的均匀分布随机数[1] 0.2784 0.7755 0.4107 0.8392 0.7455
round
是R语言里的“四舍五入”的函数,具体的规则采用banker'srounding,即四舍六入五留双规则(wiki)。round
的原型是round(x,digits=0)
,digits>
> c <- c(1.4, 1.6, 1.5, 2.5, 2.51)> round(c)[1] 1 2 2 2 3
intToUtf8
是一个将整数向量转换为或转换为Utf-8编码字符向量的函数,与之对应的函数是utf8ToInt
——>
> utf8ToInt("沈维燕")[1] 27784 32500 29141> intToUtf8(c(27784, 32500,29141))[1] "沈维燕"> intToUtf8(c(27784, 32500,29141), multiple=TRUE) # multiple: 转换为单个字符串还是多个单独的字符[1] "沈" "维" "燕"
扫描二维码
获取更多精彩
美格基因
致尊敬的您:
美格基因专注微生物组学领域,不断拓展基因组学在环境、生态、农业和医学健康领域的应用,持续开发国际领先的产品和服务,致力于成为全球领先的微生物组学产品和服务提供者。
公司已开拓的业务领域有:16S/18S/ITS测序;16S全长测序;GeoChip、宏基因组、宏转录组、宏病毒组测序;单菌框架图、完成图。
目前已为清华大学、中国科学院、中山大学、浙江大学、美国佐治亚理工学院、香港科技大学等国内外众多科研学术机构提供了全方位的科研服务,在行业内具备显著影响力。
如您有任何需求和疑问,欢迎随时咨询,美格基因竭诚为您服务!
文章为用户上传,仅供非商业浏览。发布者:Lomu,转转请注明出处: https://www.daogebangong.com/articles/detail/R%20language%20drawing%20Chinese%20font%20solution.html
评论列表(196条)
测试