ggplot2中geom_text的相对定位是什么?

13

我正在使用gglot2中的geom_text注释图表,我想使用相对位置而不是绝对位置。也就是说,我想要一个(0.5, 0.5)的位置,无论x和y轴的限制如何,都是居中的。这个可能吗?

或者,如果我有x和y轴的限制,当然也可以将相对位置转换为绝对位置。从图中提取这些限制是否可能?

2个回答

8
如果您知道绘图数据的范围,可以使用以下事实计算“真实”的x和y限制:默认情况下,ggplot使用0.05的加性扩展因子,使得图形的范围略微超出实际数据值。 您可以在指定比例尺时使用expand = c(mult, add)来指定乘法和加法扩展因子,其中mult是乘法因子等等。 因此,默认设置为expand = c(0,0.05)

现在我正在使用比较麻烦的方法处理数据范围。不过我不知道可以指定扩展因子。非常感谢你的提示。 - c00kiemonster
3
我不理解这是如何工作的。我遇到了这个问题,你能否用一个简单的例子再详细解释一下?请注意,我的翻译不会改变原文的意思。 - Eduardo

3

是的,可以从ggplot2-plot中提取x和y限制。以下函数返回ggplot2 plot对象中心的x和y坐标:

center.position <- function(plot) {
xpos <- (ggplot_build(plot)$panel$ranges[[1]]$x.range[2]-ggplot_build(plot)$panel$ranges[[1]]$x.range[1])/2+ggplot_build(plot)$panel$ranges[[1]]$x.range[1]
ypos <- (ggplot_build(plot)$panel$ranges[[1]]$y.range[2]-ggplot_build(plot)$panel$ranges[[1]]$y.range[1])/2+ggplot_build(plot)$panel$ranges[[1]]$y.range[1]
return(data.frame(x=xpos,y=ypos))
}

如果您的x-Data是以POSIXct格式表示的,则仍需进行转换:

center.coords <- center.position(myplot)
myplot <- myplot + annotate("text",x=as.POSIXct(center.coords$x,origin="1970-01-01"), y=center.coords$y, label="X")

3
顺便提一下,ggplot_build(plot)的结构已经改变了。在2.1.1版本中,它大致是这样的:ggplot_build(plot)$layout$panel_ranges[[1]]$x.range[2] - Maxim.K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接