ggplot2 PDF 输出中的 Unicode 字符

2023-12-01

如何在使用 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

在寻找这个问题的解决方案时,我发现了一些evidenceR 使用单字节编码进行多字节编码,例如用于 PDF 或 postscript 输出的 UTF-8。我还找到了一些建议,例如,能够获得欧元符号工作,但没有通用的解决方案。


正如本建议的那样,cairo_pdf()是你的朋友。它还允许您通过以下方式在 PDF 中嵌入非 Postscript 字体(即 TTF/OTF):family参数(如果您碰巧没有任何包含您要使用的字形的 postscript 字体,则至关重要)。例如:

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

...gives a PDF that looks like this: ggplot2 graph with custom font family and non-ASCII characters in the title

也可以看看这个问题;尽管从标题来看它并没有直接相关,但其中有很多关于如何让字体在 R 中实现您想要的功能的内容。

EDIT根据评论中的请求,以下是特定于 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 文件的说明是我必须做的才能获得Cairo() and CairoPDF()命令在library(Cairo)在 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ggplot2 PDF 输出中的 Unicode 字符 的相关文章

  • 计算 R 行中的非零条目数

    我有以下类型的数据 mode1 mode2 mode3 1 8 1 0 2 0 0 0 3 6 5 4 4 1 2 3 5 1 1 1 数据使用dput structure list mode1 c 8L 0L 6L 1L 1L mode2
  • StatET调试工具

    我想我只是很密集 但我似乎无法弄清楚如何在 Eclipse 中的 R 中使用调试工具 StatET 插件 有人有关于这个主题的任何提示或教程吗 StatET 2 00 现在对高级 可视化调试提供实验性支持 需要 Eclipse 3 6 或
  • 无法编译包“maps”

    当我安装 maps 包时 安装中出现警告 ld warning ignoring file Library Developer CommandLineTools SDKs MacOSX10 14 sdk usr lib libSystem
  • 无法将“gather”输出的列名称更改为默认名称以外的任何名称

    我正在尝试使用gather in the tidyr包 但我无法更改默认名称的输出列名称 例如 df data frame time 1 100 a 1 100 b 101 200 df long df gt gather foo bar
  • R 数据结构的运算效率

    我想知道是否有任何关于操作效率的文档R 特别是那些与数据操作相关的 例如 我认为向数据框添加列是有效的 因为我猜您只是向链接列表添加一个元素 我想添加行会更慢 因为向量保存在数组中C level你必须分配一个新的长度数组n 1并将所有元素复
  • 条件和分组 mutate dplyr

    假设我有以下每个抽屉库存增加的数据 gt socks year drawer nbr sock total 1990 1 2 1991 1 2 1990 2 3 1991 2 4 1990 3 2 1991 3 1 我想要一个二进制变量来标
  • ggplot2:带有 geom_line 的 x 轴因子不起作用

    我想要一个线图 其中value绘制为函数expt每级一行var 这是我的数据 lines lt expt var value 1 none p 0 183065327746799 2 none p 0 254234138384241 3 n
  • 安装 2.15 后 ggplot2 中的 alpha 通道不起作用

    更新到 R 2 15 后 ggplot 中的 alpha 通道似乎不再起作用 plot rnorm 100 rnorm 100 bg cc000055 pch 21 工作得很好但是 qplot rnorm 100 rnorm 100 col
  • R 中的数据框操作 - 将单元格向左移动并删除 NA

    我有一个数据框 其列由随机分布的值和 NA 组成 如下所示 a lt c S E NA S NA b lt c A NA M G K c lt c I NA NA NA L meh lt dataframe a b c 1 2 3 4 5
  • 更改ggplot2中的字体

    曾几何时 我改变了我的ggplot2字体使用windowsFonts Times windowsFont TT Times New Roman 现在 我无法摆脱这一切 在尝试设置family in ggplot2 theme 当我用不同的字
  • 如何从 R 中的多列中获取计数?

    我有一个包含三列的数据框 State1 State2 State3 有没有一种方法可以使用所有三列 最好使用 dplyr 并且没有显式循环 来获取一个数据帧中每个状态的计数 我只知道如何做一栏 df gt group by State1 g
  • R:根据列名部分匹配计算行平均值

    我有一个看起来像这样的表 er er 1 as as 1 as 2 rt op a 1 6 90 8 6 4 87 b 1 8 56 7 5 5 9 c 8 7 6 4 5 9 6 d 1 0 8 6 4 3 6 e 9 7 2 4 3 8
  • ggplot 的每个方面都有不同的 `geom_hline()`

    这个问题在这里已经有答案了 library tidyverse ggplot mpg aes cty hwy geom point facet grid year fl geom hline yintercept mean mpg hwy
  • 将文件名附加到 R 中的数据框

    我想将文件名附加到我的表中 但它似乎并没有真正起作用 我正在做的是迭代文件名列表 打开它们 将所有数据附加到一个数据帧 对于每个附加文件 我想添加其文件名 我希望将其附加到每一行 以便稍后当我查看数据时 我会知道给定行源自哪个文件 但似乎并
  • 如何使用 ggplot2 将 IPCC 点画添加到全球地图

    我需要将 IPCC style 点画添加到全球地图中 如下所示这个帖子 https stackoverflow com questions 11736996 adding stippling to image contour plot 不过
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • 通过消除嵌套的 for 循环来改进此代码

    R 包corrplot除其他内容外 还包含这个漂亮的功能 cor mtest lt function mat conf level 0 95 mat lt as matrix mat n lt ncol mat p mat lt lowCI
  • ggplot geom_bar - 条形太宽

    对于这个非信息性的标题 我感到很抱歉 gt y read csv textConnection scan sep n what raw org art type length 191 gk Finish short 4 147 ik Att
  • 函数速度测试的奇怪结果

    我编写了一个使用递归来查找最大公因数 分母 的函数 gt gcd function a b if length a length b gt 1 warning Only scalars allowed using first element
  • 如何绘制 Voronoi 曲面细分的多边形而不是线段?

    我找到了一种使用 ggplot2 绘制 Voronoi 曲面细分的分段的方法 library deldir library ggplot2 library ggthemes set seed 123 df lt data frame lat

随机推荐

  • 使用 Azure Active Directory 对用户进行身份验证后执行代码

    我使用 VS2015 创建了一个 ASP NET MVC Core 1 1 0 应用程序 在对话框中 我选择了连接到 Azure AD 的选项 因此 VS 生成了样板代码 并且正如预期的那样 应用程序将我重定向到 Microsoft 的登录
  • 插入一个元素

    Javascript中是否有一种方法可以在当前节点之后插入一个元素 我知道有一种方法可以在XML的当前节点之前插入一个元素 但是有没有一种方法可以在当前节点之后插入一个元素 在当前节点之后 只需获取当前节点的下一个兄弟节点并在该节点之前插入
  • 对单表使用 Merge 语句

    是否可以对单表使用merge语句 我想在插入之前检查是否已存在相同的值集 则应更新该记录 如果不存在 则应插入该记录 我在互联网上搜索过 但我得到了带有 2 个表的合并语句的示例 我在一张桌子上尝试过 但无法获得积极的结果 我试图检查的值将
  • Realm 数据库中的搜索操作速度

    这是我的模型RealmObject class public class ARDatabase extends RealmObject PrimaryKey private String uid private String namex p
  • 未捕获的类型错误:无法调用未定义的方法“hasChildNodes”

    我正在尝试使用 jquery 中的 ajax 请求读取 XML 下面是代码 它在 IE 中工作正常 但是当我在 Chrome 上运行它时 我遇到了这个错误 未捕获的类型错误 无法调用未定义的方法 hasChildNodes ajax typ
  • 如何从 querySelectorAll 获取所有元素并与 addEventListener 一起使用

    我有一个块 当我单击加号时 会创建 4 个子块 当我单击任何子块加号按钮时 我必须添加 rooms guests plus类 它们增加自0 to 5当单击减号按钮时 rooms guests minus类 以同样的方式减少 const ro
  • 在 Android 上运行模拟器时出错

    我正在尝试在 Android 上运行 PhoneGap 应用程序 当我运行命令时 phonegap run android emulator verbose 我收到这个错误 Running command getprop emu uuid
  • 具有连续分隔符的 strtok_s 行为

    我正在并行解析 3 个值 这些值用特定的分隔符分隔 token1 strtok s str1 separator nextToken1 token2 strtok s str2 separator nextToken2 token3 str
  • Python“使用错误的参数类型调用”错误

    我明白为什么我会收到此错误 它正在寻找我的对象作为参数 并接收字符串值 但我很困惑 不知道解决方案是什么 以下代码片段只是尝试运行此命令 self buttonGroup addButton self ui m001 x 次数 num 0
  • 如何在 Struts 2 中使用 DispatcherListener

    有一个界面DispatcherListener在Struts2中 文档说 一个接口来标记那些想要在init and destroy of a Dispatcher 但是这个接口怎么用呢 如果我创建一个实现这个接口的类 我应该如何将它配置到S
  • 我如何使用空手道测试以 AVRO 格式给出响应的其余端点?

    Karate 对于验证我们提供 json 响应的其余 api 非常有帮助 现在我们有了 api 它可以为我们提供 avro 格式的响应 可能还需要以 avro 格式发送有效负载 我如何使用空手道测试以 AVRO 格式给出响应的其余端点 有什
  • Python/Pandas:如果列有多个值,则转换为列表中具有多个值的单行

    在我的数据框中 我有很多相同的实例AutoNumber有不同的KeyValue String 我想将这些实例转换为单行 其中KeyValue String是由多个唯一值组成的列表 AutoNumber KeyValue String Ref
  • 如何连续向下滚动页面直到找到某个元素? Python 硒

    我对 Linkedin 技能部分的加载更多按钮感到困惑 我在查找按钮的 xpath 时收到此错误 selenium common exceptions NoSuchElementException Message no such eleme
  • xmlHttpRequest abort() 方法不会关闭 Internet Explorer 中的连接

    我有多个xmlHttpRequest在我的页面上 我正在尝试调用abort 对他们所有人的方法 在 FF 中效果很好 另一方面 IE 却没有做任何该死的事情 连接不会关闭 并且在请求完成之前我无法导航到另一个页面 这是什么 为什么 IE 不
  • 从 Angular 5 Universal 获取域名始终返回 127.0.0.1

    我在 Angular 5 应用程序的服务器端渲染方面遇到问题 我需要域来创建正确的链接 应用程序在不同的环境中使用 并且为每个端点创建几个包是个坏主意 所以我尝试使用堆栈中的选项 但我总是得到 127 0 0 1 4000 作为域 主机 我
  • 快速执行命令后获取终端输出

    我使用以下代码在终端中运行一些命令 system the command here 在我想知道运行这个命令的结果是什么之后 例如如果我跑 system git status 我想阅读有关我的存储库中更改的实际信息 有什么办法可以快速做到这一
  • 链表删除节点、简单链表

    我正在尝试实现一个从链表中删除节点的函数 到目前为止 我只能删除列表的第一个节点 3 我尝试从delete转到for循环 我以为内存没有分配好 我已经挣扎了几天 我不明白 请帮助我一点 这是我从大学收到的主题 include
  • 如何在 ASP.NET MVC 中禁用路由值的绑定?

    据我所知 ValueProviderDictionary 从 3 个地方获取绑定值 来自邮寄表格 来自路线值 来自查询字符串 我希望能够禁用第二个和第三个选项 我在这里看到的唯一解决方案是创建我自己的自定义 ValueProvider 复制
  • 网络浏览器打印

    Hi我正在使用 C WPF webbrowser 控件在本地计算机中显示 html 文件 我通过执行 webbrowser 控件的打印命令向我的应用程序添加了打印功能 但 Internet Explorer 的默认行为是在屏幕底部打印文件
  • ggplot2 PDF 输出中的 Unicode 字符

    如何在使用 ggplot2 创建的 PDF 绘图中使用 Unicode 字符作为标签 标题和类似内容 考虑以下示例 library ggplot2 qplot Sepal Length Petal Length data iris main