我有一个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 单位。我只想知道是否可以在 annotate()
中使用 npc 单位。有两种相关策略,但它们并不完全令人满意:
可以通过将npc单位指定为
grid::textGrob()
的参数来使用npc单位。然后可以使用annotation_custom()
将grob放置在特定位置,例如 @baptiste的这个回答。但是,这种解决方案比我想要的更加繁琐。"ggpmisc"包包含
geom_text_npc()
。但是它目前还不能与annotate()
一起使用。也就是说,annotate("text_npc", ...)
似乎不起作用。[编辑:现在已经可以使用了。请参见Pedro Aphalo下面的信息。]
还有许多相关的文章。特别地,Greg Snow建议使用网格(grid)创建具有p
尺寸的视口(viewport),然后注释该视口。而@teunbrand建议一种方法是将p
转换为“gtable”对象(使用ggplotGrob()
),然后绘制该“gtable”对象。这两种策略都可能适用于我的目的。但是否有更直接的方法使用npc坐标与annotate()
?
annotate()
函数。这个新的annotate()
函数覆盖了原始定义,增加了对npcx和npcy位置审美的支持。我将在几天内提交到CRAN。同时,该代码也可从Bitbucket获取(请注意,由于历史原因,当前的主分支称为“no-debug”)。这使得annotate("text_npc", ...)
可以使用。 - Pedro J. Aphalo