绘制生信宝典调查总结文中的柱状图时,出现了中文乱码,就搜索了下解决方案,记录如下。

修改图形的字体

ggplot2中修改图形字体。

# 修改坐标轴和legend、标题的字体
theme(text=element_text(family="Arial"))
# 或者
theme_bw(base_family="Arial")# 修改geom_text的字体
geom_text(family="Arial")

ggplot2支持中文字体输出PDF

showtext包可给定字体文件,加载到R环境中,生成新的字体家族名字,后期调用这个名字设定字体,并且支持中文写入pdf不乱码

library(showtext)
showtext.auto(enable=TRUE)font_path = "FZSTK.TTF"
font_name = tools::file_path_sans_ext(basename(font_path))
font.add(font_name, font_path)# 修改坐标轴和legend、标题的字体
theme(text=element_text(family=font_name))# 修改geom_text的字体
geom_text(family=font_name)

系统可用字体

  • Linux字体一般在 /usr/share/fonts下,也可以使用fc-list列出所以加载的字体。

  • Windows字体在 C:\Windows\Fonts\下,直接可以看到,也可以拷贝到Linux下使用。

合并字体支持中英文

通常情况下,作图的字体都是英文,ggplot2默认的或按需求加载一种字体就可以了。但如果中英文混合出现时,单个字体只能支持一种文字,最好的方式是合并两种字体,类似于Word中设置中英文分别使用不同的字体。

软件FontForge可以方便的合并中英文字体,其安装也比较简单,直接 yum install fontforge.x86_64

假如需要合并FZSTK.TTF (windows下获取)和Schoolbell-Regular.ttf (谷歌下载),这两个都是手写字体。按如下,把字体文件和程序脚本mergefont.pe放在同一目录下,运行fontforge -script mergefont.pe即可获得合并后的字体FZ_School.ttf

$ ls
FZSTK.TTF mergefont.pe Schoolbell-Regular.ttf
$ cat mergefont.pe
Open("FZSTK.TTF")
SelectAll()
ScaleToEm(1024)
Generate("temp.ttf", "", 0x14)
Close()# Open English font and merge to the Chinese font
Open("Schoolbell-Regular.ttf")
SelectAll()
ScaleToEm(1024)MergeFonts("temp.ttf")
SetFontNames("FZ_School", "FZST", "Schoolbel", "Regular", "")
Generate("FZ_School.ttf", "", 0x14)
Close()$ fontforge -script mergefont.pe
$ ls
FZ_School.ttf FZSTK.TTF mergefont.pe Schoolbell-Regular.ttf

然后安装前面的介绍使用showtext导入即可使用。

一个示例

字体文件自己从Windows获取,School bell从Google fonts获取。

library(showtext)
## Add fonts that are available on current path# 方正字体+schoole bell (中英混合)
font.add("FZ_School", "FZ_School.ttf")
# 黑体
font.add("simhei", "simhei.ttf")
font.add("Arial","arial.ttf")# 黑体和Arial的合体
font.add("HeiArial", "HeiArial.ttf")
showtext.auto()  ## automatically use showtext for new deviceslibrary(ggplot2)p = ggplot(NULL, aes(x = 1:10, y = 2^(1:10), group=1)) + geom_line() +theme(axis.title.y=element_text(family="Arial"), axis.title.x=element_text(family="HeiArial"),plot.title=element_text(family="simhei")) +xlab("Days spent on 生信宝典") +ylab("Things you have learned") +ggtitle("生信宝典,换个角度学生信") +annotate("text", 7, 300, family = "FZ_School", size = 8,label = "收获曲线 (Harvest curve)", angle=15)# annotate指定的是文字的中间部分的位置ggsave(p, filename="example-SXBD.pdf", width = 7, height = 4)  ## PDF device

Reference

  • 中英文字体混合:

    http://www.voidcn.com/article/p-gnggkwmy-vn.html

  • 改变字体类型:

    https://github.com/yixuan/showtext

  • 获取文件名:

    https://stackoverflow.com/questions/29113973/getting-filename-without-extension-in-r

关注生信宝典,换个角度学生信

  • 一个震撼的交互型3D可视化R包 - 可直接转ggplot2图为3D

  • 赠你一只金色的眼 - 富集分析和表达数据可视化

  • 是Excel的图,不!是R的图

  • 道友,来Rstudio里面看动画了

  • 用了这么多年的PCA可视化竟然是错的!!!

  • R语言可视化学习笔记之ggridges包

高颜值免费在线绘图(点击图片直达网站手册)

往期精品(点击图片直达文字对应教程)

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

R语言学习 - 图形设置中英字体相关推荐

  1. R 学习 - 图形设置中英字体

    微信公众号:http://mp.weixin.qq.com/s/NAwyvtTS7t5rRU7KKBwHTA 绘制生信宝典调查总结文中的柱状图时,出现了中文乱码,就搜索了下解决方案,记录如下. 修改图 ...

  2. R语言配置可视化内容中的字体为斜体(italic)实战:标题斜体、轴标签斜体、文本内容斜体、或者部分内容斜体

    R语言配置可视化内容中的字体为斜体(italic)实战:标题斜体.轴标签斜体.文本内容斜体.或者部分内容斜体 目录

  3. r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//") > setwd("e:\桌面\") > ...

  4. R语言学习 - 热图简化

    前面推出过热图绘制和热图美化,现在来一个函数绘制热图的简化方式.文后更有不用写代码的在线工具可用. R语言 - 基础概念和矩阵操作 R语言 - 热图简化 R语言 - 热图绘制 (heatmap) R语 ...

  5. R语言学习 - 热图美化 (数值标准化和调整坐标轴顺序)

    生物信息学习的正确姿势 NGS系列文章包括NGS基础.在线绘图.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程).单细胞 ...

  6. R语言使用treemap包中的treemap函数可视化treemap图:treemap将分层数据显示为一组嵌套矩形、自定义设置treemap图的调色板、自定义设置treemap标题字体的大小

    R语言使用treemap包中的treemap函数可视化treemap图:treemap将分层数据显示为一组嵌套矩形.自定义设置treemap图的调色板.自定义设置treemap标题字体的大小 目录

  7. R语言学习笔记——入门篇:第三章-图形初阶

    R语言 R语言学习笔记--入门篇:第三章-图形初阶 文章目录 R语言 一.使用图形 1.1.基础绘图函数:plot( ) 1.2.图形控制函数:dev( ) 补充--直方图函数:hist( ) 补充- ...

  8. R语言可视化绘制及PDF使用字体参数列表:查看字体列表、可视化绘制图像中的字体参数列表、字体示例并写入pdf

    R语言可视化绘制及PDF使用字体参数列表:查看字体列表.可视化绘制图像中的字体参数列表.字体示例并写入pdf 目录 R语言可视化绘制及PDF使用字体参数列表:查看字体列表.可视化绘制图像中的字体参数列 ...

  9. R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function)

    R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function) 目录

最新文章

  1. Layman’s explanation of SAP IS Retail concepts: assortments and listing
  2. Source Insight checking for modified files 卡顿(Reload externally modified files automatically取消)(未解决)
  3. Web开发中8个基础常见功能
  4. Java ADF开发入门-简单ArcGIS Server Web ADF应用
  5. 关于汽车领域的知识图谱实战入门
  6. 阿里巴巴:全链路压测体系建设方案的思考与实践
  7. Java Object类详解
  8. 【计算机网络】—— 差错编码(纠错编码)
  9. 一文了解GaussDB 200的产品架构、数据流程、组网方案、服务部署原则、企业级增强特性......
  10. 二十大数据可视化工具(二)
  11. 为什么C预处理程序将单词“ linux”解释为常量“ 1”?
  12. java程序自动重启_java程序自动重启
  13. 仙岛求药 详解(C++)
  14. Python和Matlab小波分析
  15. 微信公众号管理平台使用教程
  16. CAD如何使用圆命令做辅助线绘制梯形图案呢?
  17. RK3399 GT1X触摸屏驱动调试笔记
  18. 【STM32标准库】【基础知识】时钟系统
  19. 让 Vivado有Zybo Board的配置文件
  20. 为VMware vSphere创建Ubuntu 18.04 Terraform模板

热门文章

  1. 【Java】《基于Java的面向对象范式》学习笔记分享
  2. 【Java】对Java构造器参数问题的若干思考
  3. 【Python】Python里的复数运算
  4. 软件工程——认识方法、模型、工具和技术
  5. 获取机器安装.NET版本的几种方式
  6. Hibernate事务增删改查(第一部分)
  7. Junit源码阅读(四)之自定义扩展
  8. 使用 XHGui 对 PHP 应用进行性能诊断
  9. iOS LLDB console debug总结
  10. 批量输入ISA防火墙的URL对象