在跨设备和平台(尤其是PDF)的R图形中使用Unicode“类似于dingbat的”字形

你们中的有些人可能已经看过我关于这个主题的博客文章,在这里我希望帮助朋友产生半填充圆作为图形上的点,从而编写了以下代码:


TestUnicode <- function(start="25a0", end="25ff", ...)

  {

    nstart <- as.hexmode(start)

    nend <- as.hexmode(end)

    r <- nstart:nend

    s <- ceiling(sqrt(length(r)))

    par(pty="s")

    plot(c(-1,(s)), c(-1,(s)), type="n", xlab="", ylab="",

         xaxs="i", yaxs="i")

    grid(s+1, s+1, lty=1)

    for(i in seq(r)) {

      try(points(i%%s, i%/%s, pch=-1*r[i],...))

    }

  }


TestUnicode(9500,9900) 

这是可行的(即产生一个几乎完整的凉爽的符号符号网格):


在X11或PNG设备上的Ubuntu 10.04上

在安装了pango-devel的Mandriva Linux发行版上,具有本地R的相同设备

它在不同程度上(无声地或警告中)无法不同程度地生成(即生成部分或全部填充有点或空矩形的网格):


使用PDF或PostScript在同一台Ubuntu 10.04计算机上运行(尝试将font =“ NimbusSan”设置为使用URW字体无济于事)

在MacOS X.6上(石英,X11,开罗,PDF)

例如,尝试所有可用的PDF字体系列:


flist <- c("AvantGarde", "Bookman","Courier", "Helvetica", "Helvetica-Narrow",

        "NewCenturySchoolbook", "Palatino", "Times","URWGothic",

        "URWBookman", "NimbusMon", "NimbusSan", "NimbusSanCond",

        "CenturySch", "URWPalladio","NimbusRom")


for (f in flist) {

  fn <- paste("utest_",f,".pdf",sep="")

  pdf(fn,family=f)

  TestUnicode()

  title(main=f)

  dev.off()

  embedFonts(fn)

}

在Ubuntu上,这些文件都不包含符号。


使它能够处理尽可能多的组合会很好,但是尤其是在某些矢量格式中,尤其是在PDF中更是如此。


任何有关字体/图形设备配置的建议都将受到欢迎。


幕布斯6054654
浏览 554回答 3
3回答

噜噜哒

我发现该cairo_pdf设备完全不够用:输出pdf与屏幕渲染都明显不同,并且对绘图的支持是粗略的。但是,在OS X上有一个非常简单的解决方法:使用“普通” quartz设备并将其设置type为pdf:quartz(type = 'pdf', file = 'output.pdf')不幸的是,在我的计算机上,它忽略了字体系列,并始终使用Helvetica(尽管文档声称默认值为Arial)。至少还有两个陷阱:pdf将连字符转换为负号。这可能甚至不总是您想要的,但是正确排版负数非常有用。链接的线程描述了解决方法。当然,它是特定于平台的,并且只能在OS X上运行。(我意识到OP简短地提到了Quartz设备,但是经常查看此线程,并且我认为此解决方案需要更加突出。)
打开App,查看更多内容
随时随地看视频慕课网APP