R 在PDF中打印符号失败

R 在PDF中打印符号失败,r,pdf,plot,unicode,symbols,R,Pdf,Plot,Unicode,Symbols,我有以下代码来创建绘图。在x和y轴上有符号,当我以该格式保存绘图时,这些符号会以JPEG的形式出现在屏幕上,但当我将绘图保存为PDF时则不会出现 我的\u2030是否有其他符号可以打印在我的PDF或其他解决方案中?请参见以下正确(JPEG格式)和错误(PDF)打印的示例 您可能必须更改编码。在我的mac电脑上,这会显示‰符号: pdf('test.pdf',encoding="MacRoman") plot.new() text(0,labels="\u2030&

我有以下代码来创建
绘图
。在
x
y轴上
符号
,当我以该格式保存绘图时,这些符号会以
JPEG
的形式出现在屏幕上,但当我将绘图保存为
PDF
时则不会出现

我的
\u2030
是否有其他符号可以打印在我的PDF或其他解决方案中?请参见以下正确(JPEG格式)和错误(PDF)打印的示例


您可能必须更改编码。在我的mac电脑上,这会显示‰符号:

pdf('test.pdf',encoding="MacRoman")
plot.new()
text(0,labels="\u2030")
dev.off()

请在中查找可用的编码并进行尝试。

问题在于默认字体没有“‰”(我称之为“每mil”)作为使用\u0028生成的字形。您需要更改为具有该标志符号的字体:

?pdfFonts
这就是我在没有问题的情况下通过设置得到的结果(至少我了解ti)


我有同样的问题,以PDF格式保存与MAC。我和ggsave和MacRoman一起储蓄

ggsave("Name_of_your_file.pdf", #choose your own name
   encoding="MacRoman",
   width = 20, #size that you want
   height = 20, #size that you want
   units = "cm")

它会将您的文件保存在您保存R文件的位置。

这取决于您的系统是否具有所需的真实字体文件[提示:安装showtext软件包并使用View(font_files()]您应该能够通过

  • 首先导出到临时文件,如“temp.png”
  • 使用pdf()或cairo_pdf()导出到pdf文件,例如“UnicodeToPDF.pdf”
  • 结合使用grid.arrange(来自gridExtra)、rasterGrob(来自grid)和readPNG(来自png)将temp.png文件插入UnicodeToPDF.pdf文件
  • 删除“temp.png”文件
  • 以下图片是为了跟进康拉德·鲁道夫的评论而添加的。

    您是否尝试过其他pdf设备,如
    cairo\u pdf
    ?我看不出任何对我来说似乎“不正确”的东西?我尝试过cairo\u pdf,但在如上所述运行
    plot
    命令时出错。一种解决方法(如果您的最终目标是在LaTeX文档中包含绘图…)是
    tikzDevice
    包(目前从CRAN流放)。您是否尝试过使用
    symbol()
    ?plotmath
    ?另请参见[您在cairo中遇到了什么错误?它在类似情况下对我有效]如果使用Mac电脑的人正在努力解决这个问题,将设备切换到
    cairo\u pdf
    可以解决许多人在这里指出的问题。
    cairo\u pdf
    使用
    ggplot2
    似乎也能正确地重现操作系统特定的许可证。例如,如果您只需键入“
    ”而不是
    \u2030
    。我得到了相同的输出,但可以复制默认编码的问题。我在Mac上使用默认编码没有任何困难。(这可能对没有透露操作系统的OP没有帮助。)他在上面的评论说:
    R版本2.14.0(2011-10-31)平台:i386-pc-mingw32/i386(32位)
    可能是区域设置。
    sessionInfo()$locale
    告诉我我使用的是“C/en_US.UTF-8/C/C/C/C”。好的,我没注意到他在Windows机器上。他不太可能有Helvetica。我的区域设置是[1]en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8,我认为这是默认的,所以@Roland,我认为你为你的安装做了一些非标准的事情。当我尝试你的代码时,我得到
    文本错误。默认值(0,labels=“/”):mbcsToSbcs
    中的未知编码“MacRoman”。关于这意味着什么以及如何解决它,您有什么建议吗?是的。您需要尝试不同的编码,因为您不在mac电脑上,而是使用windows。在工作时在我的windows计算机上进行测试后:我无法复制您的问题,并且编码
    MacRoman
    的代码也可以正常运行,这是应该也可以在windows上使用。我建议安装最新的R版本(2.15.1),如果问题仍然存在,请提供
    sessionInfo()的全部输出
    。我将更新到R的最新版本,并让大家都知道。谢谢!这根本不等同于,也不能替代保存为PDF。您正在将图像光栅化为PNG并将其放入PDF。这一点都不一样(放大!),并且在大多数情况下,您根本不需要为PDF而烦恼-只需使用PNG即可。下面是原始问题的放大图:“是否有其他符号可以打印在我的PDF中\u2030或其他解决方案?”正如你所看到的,这个问题的替代解决方案是受欢迎的。至少在我的Windows系统中,当我运行我建议的代码时,我看不出temp.png中保存的图像与pdf中插入的图像之间有任何区别。Unicode字符被打印到pdf中,这就是我提供的替代解决方案。请你详细说明在我的解决方案出现了什么问题导致两个图像之间存在显著差异?“请详细说明我的解决方案出现了什么问题导致两个图像之间存在显著差异?”-我的意思是你应该放大图片。你会看到它是光栅化的,而不是一个无损缩放的矢量图形。好吧,我花了几分钟把两个图像并排放在一起,尽可能放大,但我看不出有什么不同。从实际角度看,这将是非常困难的人眼可以看到这两幅图像,并能够抓住任何差异,最终检测到矢量图形的缺失;因此,对于一个非常具体的可视化,所提供的解决方案是否如您所认为的那样糟糕,应由用户来决定。您鼓励社区先进行放大,然后再进行mak,这是一件好事打最后一个电话。谢谢。我不相信你真的这么做了,因为。当然这是放大的,但你甚至可以看到不放大时的区别。打印时看起来更糟。PNG版本也比PDF大10倍。增加DPI会使文件大小增加更多。-无论如何,可能不是这样
    > str(pdfFonts("sans"))
    List of 1
     $ sans:List of 3
      ..$ family  : chr "Helvetica"
      ..$ metrics : chr [1:5] "Helvetica.afm" "Helvetica-Bold.afm" "Helvetica-Oblique.afm" "Helvetica-BoldOblique.afm" ...
      ..$ encoding: chr "default"
      ..- attr(*, "class")= chr "Type1Font"
    
    ggsave("Name_of_your_file.pdf", #choose your own name
       encoding="MacRoman",
       width = 20, #size that you want
       height = 20, #size that you want
       units = "cm")
    
    #--- A function to install missing packages and load them all
    myfxLoadPackages = function (PACKAGES) {
      lapply(PACKAGES, FUN = function(x) {
        if (suppressWarnings(!require(x, character.only = TRUE))) {
          install.packages(x, dependencies = TRUE, repos = "https://cran.rstudio.com/")
        }
      })
      lapply(PACKAGES, FUN = function(x) library(x, character.only = TRUE))
    }
    
    packages = c("gridExtra","grid","png")
    myfxLoadPackages(packages)
    
    #--- The trick to get unicode characters being printed on pdf files:
    #--- 1. Create a temporary file, say "temp.png"
    #--- 2. Create the pdf file using pdf() or cairo_pdf(), say "UnicodeToPDF.pdf"
    #--- 3. Combine the use of grid.arrange (from gridExtra), rasterGrob (from grid), and readPNG (from png) to insert the
    #       temp.png file into the UnicodeToPDF.pdf file
    Corrvalues = data.frame(X=seq(-0.8,0.8,0.2),
                            Y=seq(-0.8,0.8,0.2),
                            PCH=-c(10122:10130)) #--- This is equivalent to using unicode characters 10122-10130 (note the use of -)
    #--- Refer to http://xahlee.info/comp/unicode_index.html to see more unicode character integers
    
    png("temp.png", width=11, height=11, units="in", res=300)
    par(mar=c(4,5,3,1) + 0.1)
    plot(c(-1,1), c(-1,1), bty = "n", type= "n", las = 1, cex.lab = 1.5, cex.axis = 1.25, main = NULL, 
         ylab=expression(paste("Correlation Coefficient (r) for ", delta ^{15},"N"," \u0028","\u2030","\u0029")), 
         xlab=expression(paste("Correlation Coefficient (r) for ", delta ^{13},"C"," \u0028","\u2030","\u0029")))
    axis(1, at = seq(-1.0, 1.0, by = 0.1), labels = F, pos = 0, cex.axis = 0.05, tcl = 0.25)
    axis(2, at = seq(-1.0, 1.0, by = 0.1), labels = F, pos = 0, cex.axis = 0.05, tcl = 0.25)
    points(Corrvalues$X,Corrvalues$X,pch=Corrvalues$PCH,cex=2.75,col="#FF7F00")
    dev.off()
    
    pdf("UnicodeToPDF.pdf", width=11, height=11)
    grid.arrange(
      rasterGrob(
        readPNG(
          "temp.png",
          native=F
        )
      )
    )
    dev.off()
    
    file.remove("temp.png")