我有一个 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
and ,而是y
想用 npc 坐标来指定它们。出于本示例的目的,我并不担心准确地转换x = 30
为y = 4.5
npc 单位。我只是想知道是否可以使用 npc 单位annotate()
。
有两种相关的策略,但它们并不完全令人满意:
可以通过将 npc 单位指定为
grid::textGrob()
. 然后可以将grob 放在annotation_custom()
,就像@baptiste 的这个答案一样。但是这个解决方案比我想要的要麻烦一些。“ggpmisc”包包括
geom_text_npc()
. 但它还不能与annotate()
. 也就是说,annotate("text_npc", ...)
似乎不起作用。[编辑:它现在可以工作了。请参阅下面 Pedro Aphalo 的消息。]
还有很多相关的帖子。特别是,Greg Snow 建议使用网格来创建具有尺寸的视口p
,然后对该视口进行注释。@teunbrand建议了一种方法,该方法需要转换p
为“gtable”对象(使用ggplotGrob()
),然后绘制该“gtable”对象。这些策略中的任何一个都可能适合我的目的。但是有没有更直接的方法来使用 npc 坐标annotate()
?