【发布时间】:2020-12-23 18:30:25
【问题描述】:
我有一个 ggplot 对象。我想用annotate()添加一些文字,我想以npc单位指定文字的坐标。这可能吗?
这个最小的例子演示了文本通常是如何用annotate()定位的:
library(ggplot2)
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p + annotate("text", x = 30, y = 4.5, label = "hello")
我想达到同样的效果,但不是在原生坐标中指定x 和y,我想用npc 坐标指定它们。出于本示例的目的,我并不担心将 x = 30 和 y = 4.5 准确地转换为 npc 单位。我只想知道npc单位是否可以在annotate()中使用。
有两种相关的策略,但并不完全令人满意:
-
可以通过将 npc 单位指定为
grid::textGrob()来使用它们。然后可以使用annotation_custom()放置grob,如this answer by @baptiste。但是这个解决方案比我想的要麻烦一些。 -
“ggpmisc”包包括
geom_text_npc()。但是doesn't yet work 和annotate()。也就是说,annotate("text_npc", ...)似乎不起作用。 [编辑:它现在可以工作了。请参阅下面 Pedro Aphalo 的消息。]
还有很多相关的帖子。特别是,Greg Snow has suggested 使用网格创建尺寸为p 的视口,然后对该视口进行注释。而@teunbrand has suggested 一种方法需要将p 转换为“gtable”对象(使用ggplotGrob()),然后绘制该“gtable”对象。这些策略中的任何一个都可能适合我的目的。但是有没有更直接的方法来使用 annotate() 的 npc 坐标?
【问题讨论】:
-
感谢您报告此事。我在几分钟前添加了函数
annotate()来打包'ggpmisc'。这个新的annotate()覆盖了原始定义,增加了对 npcx 和 npcy 位置美学的支持。几天后我将提交给 CRAN。同时,代码可从 Bitbucket 获得(请注意,由于历史原因,当前的主分支称为“无调试”)。这使得annotate("text_npc", ...)可用。 -
这是个好消息。感谢您的软件包和此次更新。
-
更新的 'ggpmisc' 版本 0.3.6 已在几分钟前被 CRAN 接受。二进制文件仍然需要几天的时间才能可用,而从源代码更新应该可以更快。
标签: r ggplot2 grid coordinates ggpmisc