较早的时候我曾求助过一个帖子用pdf文件保持图片显示不了中文吗?但长久以来一直没有回复,于心不甘。 由于个人对于矢量图(放大不失真)有特别偏好,所以还是专门去研究了这一部分,目前发现有两个方法可以实现。
一、简捷方法:直接在PDF()中设定字体,添加family="GB1"参数;
其优点是方便快捷;缺点是字体单一,只有标准宋体。
如果想进一步了解PDF的字体库可通过names(pdfFonts())命令查看。
在此,我依旧使用上一个帖子(作业3.7)的数据来演示一下:
student19
attach(student19)
pdf("char_3.7_1.pdf",family="GB1")
plot(身高,体重)
dev.off()
复制代码
二、高级方法:调用Cairo程序包,使用CairoPDF()函数画图
library(Cairo)
CairoPDF("char_3.7_2.pdf")
plot(身高,体重,family=”STKaiti”) #
STKaiti 表示字体为华文行楷;
dev.off()
复制代码
当然,如果不知道中文字体要在family=参数后面接个什么好,我专门编制了一个包括有26种中文的函数FontsCF()
FontsCE
FC
"隶书","幼圆","华文细黑","华文楷体","华文宋体","华文中宋", "华文仿宋","方正舒体" ,"方正姚体","华文彩云","华文琥珀","华文隶书", "华文行楷","华文新魏" )
FE
"FangSong_GB2312","KaiTi_GB2312","Microsoft JhengHei","Microsoft YaHei","LiSu","YouYuan","STXihei","STKaiti",
"STSong","STZhongsong","STFangsong","FZShuTi","FZYaoti","STCaiyun","STHupo","STLiti","STXingkai","STXinwei")
CFonts
n
result
return(result)
}
复制代码
将FontsCE函数结合Cairo包来绘图到PDF,就很方便地调整中文字体了,例如
library(Cairo)
CairoPDF("char_3.7_2.pdf")
plot(身高,体重,family=FontsCE("华文楷体")) #仅需在此将华文楷体改为仿宋或其他字体名称即可。
dev.off()
复制代码
最后,列出这26种字体及其英文名:
1 新细明体 PMingLiU
2 细明体 MingLiU
3 标楷体 DFKai-SB
4 黑体 SimHei
5 宋体 SimSun
6 新宋体 NSimSun
7 仿宋 FangSong
8 楷体 KaiTi
9 仿宋_GB2312 FangSong_GB2312
10 楷体_GB2312 KaiTi_GB2312
11 微软正黑体 Microsoft JhengHei
12 微软雅黑 Microsoft YaHei
13 隶书 LiSu
14 幼圆 YouYuan
15 华文细黑 STXihei
16 华文楷体 STKaiti
17 华文宋体 STSong
18 华文中宋 STZhongsong
19 华文仿宋 STFangsong
20 方正舒体 FZShuTi
21 方正姚体 FZYaoti
22 华文彩云 STCaiyun
23 华文琥珀 STHupo
24 华文隶书 STLiti
25 华文行楷 STXingkai
26 华文新魏 STXinwei