2011-09-30 441 views
9

我使用geom_text来标注gglot2中的地块,我想要使用相对定位而不是绝对。也就是说,无论x轴和y轴的限制如何,我都希望(0.5, 0.5)的位置成为死点。那可能吗?ggplot2中geom_text的相对位置?

另外我也可以将相对位置转换为绝对位置,如果我有x和y的限制。是否可以从情节中提取这些内容?

回答

5

如果知道图中数据的范围,则可以使用ggplot默认情况下使用0.05的附加扩展因子这一事实来计算“true”x和y限制,以便图的范围扩展略微超出实际数据值。

指定比例时使用expand = c(mult, add)指定乘数和加法扩展因子,其中mult是乘法因子,依此类推。所以默认设置是expand = c(0,0.05)

+0

是啊,右现在我正在处理数据范围。我不知道如何指定扩展因子。非常感谢。 – c00kiemonster

+3

我没有得到如何工作。我面临这个问题,你能否扩展一些解释,也许有一个简单的例子? – Eduardo

1

是的,可以从ggplot2图中提取x和y限制。该函数返回x和一个GGPLOT2剧情对象中心的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-数据是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") 
+1

顺便说一句,'ggplot_build(plot)'的结构已经改变了。在2.1.1中,类似'ggplot_build(plot)$ layout $ panel_ranges [[1]] $ x.range [2]''。 –