请教:关于windows字体

Tagged: , ,

该主题包含 23 条回复,7个帖子,最后由  nml2 年 之前 更新。

查看 15 个帖子 - 1 到 15(总计 24 个)
  • 作者
    帖子
  • 1 楼

    earclimate
    Participant

    矢量图中涉及中文显示的问题,google搜索发现:windowsFonts(Times=windowsFont(“TT Times New Roman”)),问题是”TT Times New Roman”是怎么来的?宋体对应的又是什么?
    windowsFonts(SimSun=windowsFont(???))

    PS:Cairo包的功能已经大致了解了,坛里相关的帖子已查阅过。还有一个疑问,cairoPDF生成的PDF无法粘贴到Word中。

    2 楼

    ming_uld
    Moderator

    回复 第1楼 的 earclimate:关于字体,请参考 http://cos.name/cn/topic/101521#post-203466
    所有的pdf都不能粘贴到word里,你可以用png,jpeg等格式。

    3 楼

    earclimate
    Participant

    回复 第2楼 的 ming_uld:谢谢,这个帖子仔细研究过。利用pdf+family=”GB1″可以解决很多问题,但是坐标轴数值及部分英文字体往往也会打印为GB1字体,带小数点时非常难看。利用Cairo库base包的绘图似乎没有问题。但有两种情况不理想:
    1、lattice绘图中文显示失败,如spplot函数。

    library(lattice)
    library(sp)
    data(meuse.grid)
    gridded(meuse.grid)=~x+y
    meuse.grid$测试 = factor(sample(letters[1:5], 3103, replace=TRUE),levels=letters[1:10])
    meuse.grid$test = factor(sample(letters[6:10], 3103, replace=TRUE),levels=letters[1:10])
    p=spplot(meuse.grid, c("测试","test"),main="测试")
    CairoPDF("lattice_chinese_test.pdf")
    par(family = "simsun")
    print(p)
    dev.off()
    

    2、ggplot2并不乐观,geom_text字体添加了family选项后可以显示出来,但明显偏粗,看起来效果不好。

    require(ggplot2)
    require(Cairo)
    df=data.frame(x=1:100,y=sample(1:10))
    p=qplot(data=df,x=x,y=y,main="天空")+theme_bw(base_family="serif")+geom_text(x=33,y=5,label="测试",family="serif")
    CairoPDF("ggplot_chinese_test.pdf")
    print(p)
    dev.off()
    

    PS:记得偶尔利用grDevice的pdf函数生成的pdf是可以粘贴到word中的。
    这里主要考虑的是R中满足杂志出版要求的矢量图中文显示解决办法。(PNG等格式不作讨论)

    4 楼

    Ihavenothing
    Keymaster

    关于在R中绘图使用字体,我过几天会发布一个showtext包,到时候可以做到让R能用系统中任何一个字体来画图。感兴趣的话可以先看看我在github上的说明:https://github.com/yixuan/showtext

    5 楼

    Ihavenothing
    Keymaster

    回复 第3楼 的 earclimate:
    pdf应该是无法粘到word中的,你说的可能是wmf或者eps。

    6 楼

    doctorjxd
    Participant

    回复 第4楼 的 Ihavenothing:

    大赞!
    解决了我长久以来的困惑!

    不知在ggplot2下,能不能用?
    是不是只能一次性打开showtext.begin(),全做完再end()?

    7 楼

    Ihavenothing
    Keymaster

    回复 第6楼 的 doctorjxd:
    理论上是可以的,指定好family就行。showtext.begin()showtext.end()配对出现,对它们中间的绘图语句有效,其他部分不受影响。一个设备可以打开或关闭showtext多次。

    8 楼

    earclimate
    Participant

    回复 第7楼 的 Ihavenothing:期待这个……

    9 楼

    ming_uld
    Moderator

    回复 第7楼 的 Ihavenothing:你最近太多产了![s:11]

    10 楼

    ming_uld
    Moderator

    回复 第3楼 的 earclimate:对于你第一段代码,spplot函数应该通过trellis.par.set来设定图形参数,坐标轴数值及部分英文字体也应该可以进行相应的设置,你试试这段代码,我测试了一下,输出比较正常。我用的不是中文系统,不能正常输入中文,所以用了”测试”的unicode:”\u6d4b\u8bd5″.

    data(meuse.grid)
    gridded(meuse.grid)=~x+y
    meuse.grid$test1 = factor(sample(letters[1:5], 3103, replace=TRUE),levels=letters[1:10])
    meuse.grid$test = factor(sample(letters[6:10], 3103, replace=TRUE),levels=letters[1:10])
    CairoPDF("lattice_chinese_test.pdf")
    font.settings <- list(fontfamily = "KaiTi")
    my.theme <- list(
             par.xlab.text = list(fontfamily = "mono"),
             par.ylab.text = list(fontfamily = "mono"),
             par.main.text = list(fontfamily = "KaiTi"),
             axis.text = list(fontfamily = "serif"))
    trellis.par.set(theme = my.theme)
    p=spplot(meuse.grid, c("test1","test"),main="\u6d4b\u8bd5")
    print(p)
    dev.off()
    

    查看更多可以设置的参数:str(trellis.par.get()).

    另外,一个关键就是这个fontfamily的设定,我在用命令

    windowsFonts(KaiTi=windowsFont("KaiTi"))
    

    设定”KaiTi”字体之前,得到的图形是方格。如果遇到类似问题也可以这样设置一下字体试试。

    还没来得及测试站长大人的新包,估计会有更优雅的解决方案。楼主如果测试了,一起来分享哈。

    11 楼

    doctorjxd
    Participant

    回复 第7楼 的 Ihavenothing:

    刚才测试了,showtext完美支持ggplot2。pdf设备效果良好。
    实现了我多年的梦想啊!

    12 楼

    ming_uld
    Moderator

    回复 第11楼 的 doctorjxd:好炫,这字是你写的么?

    13 楼

    Ihavenothing
    Keymaster

    回复 第12楼 的 ming_uld:
    这是传说中的静蕾体。[s:11]

    14 楼

    doctorjxd
    Participant

    回复 第12楼 的 ming_uld:回复 第13楼 的 Ihavenothing:
    确实是老徐的手笔。测试一下[s:11]

    15 楼

    earclimate
    Participant

    回复 第10楼 的 ming_uld:trellis.par.set的设置之前在stackflow上已经发现,只是一直纠结于windowsFonts中参数的配置,故有此帖。不过现在确实有更优雅的解决途径了。doctorjxd兄已将showtext对ggplot2的支持测试完毕,本人对lattice(spplot)作了测试,完美支持[s:11]:

    library(lattice)
    library(sp)
    data(meuse.grid)
    gridded(meuse.grid)=~x+y
    meuse.grid$测试 = factor(sample(letters[1:5], 3103, replace=TRUE),levels=letters[1:10])
    meuse.grid$test = factor(sample(letters[6:10], 3103, replace=TRUE),levels=letters[1:10])
    pdf("lattice_chinese_test_grDevice.pdf")
    p=spplot(meuse.grid, c("测试","test"),main="测试")
    print(p)
    dev.off()
    # library(devtools)
    # dev_mode(on=T)
    # install_github("showtext", username="yixuan")
    # dev_mode(on=F) 
    library(showtext)
    font.add("songti", "simsun.ttc") ## add font
    pdf("lattice_chinese_test_showtext.pdf")
    showtext.begin()
    trellis.par.set(theme = my.theme)
    spplot(meuse.grid, c("测试","test"),main="测试")
    showtext.end()   ## turn off showtext
    dev.off()
    

    不知道怎么上图啊。
    等Ihavenothing版主大作正式发布时另开贴讨论吧,这楼已经歪了[s:11]
    还有一个问题不知道 ming_uld版有没有经验,lattice中图例(key,legend?)的label字体如何控制?在对main,xlab等字体设置后,图例的label字体似乎也变成了宋体,谷哥无获。纯属好奇,无惊。[s:11]

查看 15 个帖子 - 1 到 15(总计 24 个)

您必须先登录才能回复该主题。