COS论坛里面经常会遇到的一个问题就是绘图时中文字体怎么解决。最初,一个流行的方法是使用family = "GB1",但一般这样做出来的图比较难看,而且并没有完全解决问题。后来发现了Cairo包,喜大普奔,但后来又发现它选字体的时候不太明确,也就是说我不知道怎样才能选中我想要的那个字体。再然后,Winston Chang写了extrafont包,功能很完善,但需要系统里面安装Ghostscript。我是懒人,不想花时间在配置Ghostscript上,于是写了一个叫做showtext的包。(好像哪里不对)

showtext详细的说明写在我的英文博客里面,四级的词汇量,很好懂的。这里就简单说明一下用法,因为用法挺简单的。

上面那幅图所有的代码如下,当然要事先将其中用到的四个字体文件放到工作目录下。

library(showtext)
library(Cairo)font.add("newrocker", "newrocker.ttf")
font.add("aerofoil", "aerofoil.ttf")
font.add("xkcd", "xkcd.ttf")
font.add("nextdoor", "thegirlnextdoor.woff")CairoPNG("showtext.png", 640, 400)
showtext.begin()
plot(1, type = "n", family = "xkcd", cex.axis = 1.5, cex.lab = 1.5)
text(1, 1.2, "showtext 0.2", cex = 5, family = "nextdoor",col = "#F8766D")
text(1, 0.8, "has been released!", cex = 5, family = "newrocker",col = "#00BFC4")
title("Free to use fonts", family = "aerofoil", cex.main = 2)
showtext.end()
dev.off()

其实也就两步:先用font.add()加载字体,然后用showtext.begin()showtext.end()把绘图语句包含进来。

font.add()的第一个参数是绘图时字体的系列名(family),也就是告诉R如何在绘图时引用这个字体。第二个参数是字体的路径,如果字体在工作目录下就直接打字体名。当然,操作系统一般都会有一些默认的字体安装位置,showtext(实际上是其依赖的sysfonts包)会尝试搜索这些路径。在Windows下,直接输入

font.add("songti", "simsun.ttc")

就可以加载宋体。

加载完了字体,R本身还不知道如何使用它们,所以,绘图的语句需要包含在一对showtext.begin()showtext.end()中间。这时候只需要指定合适的family参数就可以使用这些字体了。

showtext自带了文泉驿微米黑字体,如果只是想在图中使用中文,只需要加载showtext,然后使用showtext.begin()showtext.end()即可。

注意showtext只对当前打开的图形设备有效,如果当前没有图形设备,或是设备已关闭,showtext都是不起作用的。

showtext的开发页面在https://github.com/yixuan/showtext,欢迎到那里拍砖捉虫。在此留言亦可,重谢。

------------------------------------------------------------------------------------------------------------

前两天把 showtext 包更新到了 0.4-1 版本。因为这次更新的内容比较多,所以简单写篇博客介绍下。

第一个比较重大的改变是现在可以在图形设备中自动使用 showtext 了,用法比以前更为简单。在这个版本之前,需要每次都打开图形设备,调用 showtext.begin() 和 showtext.end(),然后关闭图形设备。这样反复调用函数显得非常麻烦。在新版本中,只要在最开始调用一下 showtext.auto(),之后所有的图形设备就会自动使用 showtext 来进行渲染。这对窗口设备尤其重要,因为我们平常用 R 画图时,很少手动去调用 windows() 或是 x11(),而是直接使用 plot() 函数让 R 自动打开一个窗口。调用了 showtext.auto() 之后,窗口设备也可以自动使用载入的字体了,这对于预览图形效果会很有帮助。

自动调用的另一个好处是能在 ggsave() 中使用 showtext 了。ggsave() 本身会自动打开和关闭图形设备,所以在以前的版本中我们无法在 ggsave() 中插入 showtext.begin()。现在自动化以后,ggsave() 也可以使用 showtext 的字体库了。

要关闭自动调用功能,只需执行 showtext.auto(FALSE)

第二个比较显著的改进是更好地支持了位图图形。在之前的版本中,showtext 主要用于矢量图,比如pdf() 或者 svg()。如果在 png() 或是 jpeg() 中使用 showtext,你会发现画出的字体非常难看。这是因为那些位图设备没有较好的抗锯齿支持。而现在,showtext 可以为那些设备绘制好平滑后的字形,所以图片质量也会得到提升。唯一需要注意的是要保持图形设备的 DPI 与 showtext 的一致,比如用 png() 设备时,应该手动设置一下想要的分辨率(此处 DPI 为120)

library(showtext)
showtext.opts(dpi = 120)
png(..., res = 120)

支持位图图形也就意味着支持了窗口设备,比如 windows() 和 x11()

最后一个改进其实是之前 sysfonts 包的更新内容,就是目前在国内无法直接连接 Google 的字体库,所以在使用 font.add.google() 时,可以使用 360 提供的代理。使用方法是加一个参数,比如

library(showtext)
font.add.google("Gochi Hand", "gochi", repo = "useso")

其他的例子和说明都可以参见 Github 上的介绍。

转自:http://yixuan.cos.name/cn/2015/04/showtext-new-version/

转载于:https://www.cnblogs.com/payton/p/5391742.html

R绘图字体解决方案(转)相关推荐

  1. R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)

    写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...

  2. python 画蜘蛛_如何学习 R 绘图?

    写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...

  3. R绘图: figure margins too large错误

    最近在研究分类器,鸢尾花数据用得审美疲劳了,就从网上找了一个breast-cancer-wisconsin数据集. 建模前照例是做一些描述性统计,看下样本特征.数据集有9个自变量,1个因变量标签,先简 ...

  4. R绘图 | 山峦图(ggridges)

    ridgeline 整个新系列.目前的几个系列, #R实战  以生信分析为主, #跟着CNS学作图 以复现顶刊Figure为主,而本系列 #R绘图 则是学习不在文章中但同样很好看的图,致力于给同学们在 ...

  5. R绘图笔记 | 一般的散点图绘制

    可先阅读文章:R绘图笔记 | R语言绘图系统与常见绘图函数及参数 1.利用plot()绘制散点图 R语言中plot()函数的基本格式如下: plot(x,y,...) plot函数中,x和y分别表示所 ...

  6. R语言可视化R原生plot函数与ggplot可视化结果组合、整合输出实战:原生R绘图plot函数可视化、ggplot2包可视化、R原生plot函数与ggplot可视化结果组合

    R语言可视化R原生plot函数与ggplot可视化结果组合.整合输出实战:原生R绘图plot函数可视化.ggplot2包可视化.R原生plot函数与ggplot可视化结果组合 目录

  7. R: 绘图 barplot

    问题:barplot 18.5.16 怎么绘制 barplot,用两种方式:基础绘图 & ggplot2 解决方案: 基础绘图 barplot(height, width = 1, space ...

  8. ireport4.5在JVM中添加新字体解决方案(Font ‘標楷體‘ is not available to the JVM. See the Javadoc for more details.)

    ireport4.5在JVM中添加新字体解决方案(Font '標楷體' is not available to the JVM. See the Javadoc for more details.) ...

  9. R绘图笔记 | 火山图的绘制

    参考前文:R绘图笔记 | R语言绘图系统与常见绘图函数及参数 关于绘图,前面介绍了一些: R绘图笔记 | 一般的散点图绘制 R绘图笔记 | 柱状图绘制 R绘图笔记 | 直方图和核密度估计图的绘制 R绘 ...

  10. R绘图 | 圆角堆叠柱状图(ggchicklet )

    ggchicklet 整个新系列.目前的几个系列, #R实战  以生信分析为主, #跟着CNS学作图 以复现顶刊Figure为主,而本系列 #R绘图 则是学习不在文章中但同样很好看的图,致力于给同学们 ...

最新文章

  1. shell 脚本简单入门
  2. 目标检测- YOLO v1--You Only Look Once
  3. Ubuntu 设置Android adb 环境变量
  4. CRC16循环冗余校验 RTU-MODBUS标准 Linux C
  5. Java描述设计模式(19):模板方法模式
  6. 集散型计算机控制系统的缺点,什么是集散控制系统?有什么特点?
  7. iis8 php mysql zend,强烈推荐windows 2012 iis8 fastcgi php5.2.17 zend mysql
  8. 独家揭秘:用友云的新打算
  9. 批量执行newman
  10. 沟通的重要工具——乔哈里视窗
  11. 计算机编程及常用术语英语词汇大全
  12. 如何卸载AutoCAD 2019,彻底卸载MAC版CAD教程
  13. nodejs 定时任务
  14. 解决Vmware下虚拟机下打开gazebo报错:VMware: vmw_ioctl_command error Invalid argument
  15. 美团技术总结:Java中9种常见的CMS GC问题分析与解决
  16. 基于 OTA 场景的电控信息安全研究
  17. html网站上播放视屏代码
  18. 「GoCN酷Go推荐」Cloudreve 公私兼备的网盘系统
  19. 计算机毕业设计Java汽车客运站票务管理系统(源码+系统+mysql数据库+lw文档)
  20. Windows 中通过sh导入csv、tsv文件到数据库

热门文章

  1. 去除datatable列中重复的值
  2. Windows10 phpStudyV8.1的基本使用
  3. PHP报错:Malformed UTF-8 characters, possibly incorrectly encoded
  4. 阿里云云市场:全国快递物流查询-快递查询接口
  5. linux中id命令的功能,linux中的id命令
  6. ffmpeg支持的扩展库有哪些
  7. ProGuard:类混淆,类的指定函数保留
  8. JAVA解压tar,可以使用javatar
  9. Python加载失败
  10. 《流言终结者》,再见