R绘图中的Unicode字符-pdf设备

R绘图中的Unicode字符-pdf设备,r,pdf,plot,unicode,encoding,R,Pdf,Plot,Unicode,Encoding,我想制作一个带有轴标题的绘图,轴标题有一个作为千分之一的分隔符,并将该绘图保存为R的pdf格式。例如,我将格式化如下数字: string <- "100\u2009000" string [1] "100 000" pdf("foo.pdf") plot(1,1, axes = FALSE, xlab = "", ylab = "", col = "#FFFFFF") text(1, 1, string) dev.off() 我收到一大堆警告: Warning messages: 1:

我想制作一个带有轴标题的绘图,轴标题有一个作为千分之一的分隔符,并将该绘图保存为R的pdf格式。例如,我将格式化如下数字:

string <- "100\u2009000"
string
[1] "100 000"
pdf("foo.pdf")
plot(1,1, axes = FALSE, xlab = "", ylab = "", col = "#FFFFFF")
text(1, 1, string)
dev.off()
我收到一大堆警告:

Warning messages:
1: In text.default(1, 1, string) :
  conversion failure on '100 000' in 'mbcsToSbcs': dot substituted for <e2>
2: In text.default(1, 1, string) :
  conversion failure on '100 000' in 'mbcsToSbcs': dot substituted for <80>
3: In text.default(1, 1, string) :
  conversion failure on '100 000' in 'mbcsToSbcs': dot substituted for <89>
4: In text.default(1, 1, string) :
  font metrics unknown for Unicode character U+2009
5: In text.default(1, 1, string) :
  conversion failure on '100 000' in 'mbcsToSbcs': dot substituted for <e2>
6: In text.default(1, 1, string) :
  conversion failure on '100 000' in 'mbcsToSbcs': dot substituted for <80>
7: In text.default(1, 1, string) :
  conversion failure on '100 000' in 'mbcsToSbcs': dot substituted for <89>
在生成的pdf中,数字如下所示:100…000

我知道我可以为pdf设备提供一个编码参数,但我还没有成功地实现这一点。

您可以使用cairo\u pdf设备:

string <- "100\u2009000"
string

cairo_pdf("foo.pdf")
plot(1,1, axes = FALSE, xlab = "", ylab = "", col = "#FFFFFF")
text(1, 1, string)
dev.off()
这对我很有用,并生成了pdf。

您可以使用cairo\u pdf设备:

string <- "100\u2009000"
string

cairo_pdf("foo.pdf")
plot(1,1, axes = FALSE, xlab = "", ylab = "", col = "#FFFFFF")
text(1, 1, string)
dev.off()
这对我很有用,并生成了pdf。

您也可以使用它来渲染文本,如果您使用pdf,它保证生成矢量图形。但是,文本已转换为形状,这意味着您不能再将其选择为文本

library(showtext)
showtext_auto()

string <- "100\u2009000"
string

pdf("bar.pdf")
plot(1, 1, axes = FALSE, xlab = "", ylab = "", col = "#FFFFFF")
text(1, 1, string, family = "wqy-microhei")
dev.off()
还可以使用渲染文本,如果使用PDF,则保证生成矢量图形。但是,文本已转换为形状,这意味着您不能再将其选择为文本

library(showtext)
showtext_auto()

string <- "100\u2009000"
string

pdf("bar.pdf")
plot(1, 1, axes = FALSE, xlab = "", ylab = "", col = "#FFFFFF")
text(1, 1, string, family = "wqy-microhei")
dev.off()

谢谢,我不知道cairo_pdf。它对我也有用。但是,文件大小增加了一倍以上,可能是因为它使用位图:请注意,与postscript和pdf不同,cairo_pdf和cairo_ps有时记录位图而不是矢量图形。另一方面,它们可以在合适的平台上包含范围更广的UTF-8字形,并嵌入所使用的字体。此外,与pdf相比,cairo_pdf具有不同的字体缩放比例。也许这是唯一的解决办法?非常奇怪的描述。在这种情况下,有时意味着什么?我从cairo_pdf获取的文件与我从pdf获取的文件大小相同。这也是一个矢量图形,所以我不明白为什么在你的情况下会有所不同。对不起,恐怕我帮不上忙。:是的,我同意有时候有点含糊不清。这只是cairo_pdf手册中的一段引用。这里的简单示例生成相同的文件大小,可能是因为它太简单了。我实际处理的示例是ggplot,然后生成位图。因此,我希望找到一个不使用cairo\u pdf的解决方案。谢谢,我不知道cairo\u pdf。它对我也有用。但是,文件大小增加了一倍以上,可能是因为它使用位图:请注意,与postscript和pdf不同,cairo_pdf和cairo_ps有时记录位图而不是矢量图形。另一方面,它们可以在合适的平台上包含范围更广的UTF-8字形,并嵌入所使用的字体。此外,与pdf相比,cairo_pdf具有不同的字体缩放比例。也许这是唯一的解决办法?非常奇怪的描述。在这种情况下,有时意味着什么?我从cairo_pdf获取的文件与我从pdf获取的文件大小相同。这也是一个矢量图形,所以我不明白为什么在你的情况下会有所不同。对不起,恐怕我帮不上忙。:是的,我同意有时候有点含糊不清。这只是cairo_pdf手册中的一段引用。这里的简单示例生成相同的文件大小,可能是因为它太简单了。我实际处理的示例是ggplot,然后生成位图。因此,我希望找到一个不使用cairo_pdf.Wow的解决方案,这对我来说非常好。我将在我的应用程序的解决方案中实际使用它,因为我避免了与上面讨论的cairo_pdf相关的问题。但是,我会将cairo_pdf答案作为公认的解决方案,因为它可能是大多数用例的最佳方法。当我使用showtext方法时,字体与默认pdf或例如pdffamily=sans调用不同。你知道在使用showtext_auto时如何导出标准字体吗?哇,这对我来说非常好用。我将在我的应用程序的解决方案中实际使用它,因为我避免了与上面讨论的cairo_pdf相关的问题。但是,我会将cairo_pdf答案作为公认的解决方案,因为它可能是大多数用例的最佳方法。当我使用showtext方法时,字体与默认pdf或例如pdffamily=sans调用不同。您知道如何在使用showtext_auto时导出标准字体吗?