gpt4 book ai didi

r - ggplot2 PDF 输出中的 Unicode 字符

转载 作者:行者123 更新时间:2023-12-02 02:29:08 28 4
gpt4 key购买 nike

如何在使用 ggplot2 创建的 PDF 绘图中使用 Unicode 字符作为标签、标题和类似内容?

考虑以下示例:

library(ggplot2)
qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ")
ggsave("t.pdf")

绘图的标题使用 Unicode 字符(小型大写字母),在输出中显示为 ...。该问题仅出现在 pdf 图上;如果我用 ggsave("t.png") 替换最后一行,则输出符合预期。

我做错了什么?我的 R 脚本采用 UTF-8 编码。一些系统信息:

R version 2.14.1 (2011-12-22)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats graphics grDevices utils datasets methods base

在寻找这个问题的解决方案时,我发现了一些evidence R 对多字节编码使用单字节编码,例如 PDF 或 postscript 输出的 UTF-8。我还找到了一些建议,例如,能够获得 Euro sign working ,但没有通用的解决方案。

最佳答案

正如 Ben 所建议的,cairo_pdf() 是你的 friend 。它还允许您通过 family 参数在 PDF 中嵌入非 Postscript 字体(即 TTF/OTF)(如果您碰巧没有任何包含您想要的字形的 Postscript 字体,这一点至关重要。使用)。例如:

library(ggplot2)
cairo_pdf("example.pdf", family="DejaVu Sans")
qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ")
dev.off()

...给出一个如下所示的 PDF: ggplot2 graph with custom font family and non-ASCII characters in the title

另请参阅this question ;尽管从标题来看它并不直接相关,但其中有很多关于如何让字体在 R 中完成您想要的事情的内容。

编辑每个注释中的请求,以下是特定于 Windows 的代码:

library(ggplot2)
windowsFonts(myCustomWindowsFontName=windowsFont("DejaVu Sans"))
cairo_pdf("example.pdf", family="myCustomWindowsFontName")
qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ")
dev.off()

要使用基本图形命令 cairo_pdf(),首先使用 windowsFonts() 命令定义字体系列就足够了,如上所示。当然,请确保您使用系统上实际拥有的字体,并且该字体实际上具有您需要的所有字形。

下面注释中有关 DLL 文件的说明是我在 library(Cairo) 中获取 Cairo()CairoPDF() 命令所必须做的) 在 Windows 上工作。然后:

library(ggplot2)
library(Cairo)
windowsFonts(myCustomWindowsFontName=windowsFont("DejaVu Sans"))
CairoPDF("example.pdf")
par(family="myCustomWindowsFontName")
qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ")
dev.off()

关于r - ggplot2 PDF 输出中的 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768176/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com