2011-09-30 7 views
9

gglot2에 플롯에 주석을 달기 위해 geom_text을 사용하고 있으며 절대 위치가 아닌 상대 위치 지정을 사용하고 싶습니다. 즉, x 및 y 축 제한에 관계없이 (0.5, 0.5)의 위치를 ​​데드 센터로 지정합니다. 그게 가능하니?ggplot2에서 geom_text의 상대 위치 지정?

또는 x와 y 한계가있는 경우 상대적인 위치를 절대 위치로 변환 할 수 있습니다. 줄거리에서 추출 할 수 있습니까?

답변

5

플롯의 데이터 범위를 알고있는 경우 그래프의 범위가 확장되도록 ggplot 기본적으로 0.05의 추가 확장 인수를 사용하여 "실제"x 및 y 제한을 계산할 수 있습니다 실제 데이터 값을 약간 초과합니다.

expand = c(mult, add)을 사용하여 배율을 지정할 때 승수 및 증분 확장 인수를 지정할 수 있습니다. 여기서 mult은 곱셈 요소입니다. 따라서 기본 설정은 expand = c(0,0.05)입니다.

+0

네 권리를 지금 나는 데이터 범위에 관해서 먼 길을 가고있다. 나는 확장 인수를 지정하는 것에 대해 몰랐다. 감사합니다. – c00kiemonster

+3

나는 이것이 어떻게 작동하는지 알지 못했다. 나는 그 문제에 직면하고있다. 간단한 설명으로 좀 더 설명을 확장 할 수 있을까? – Eduardo

1

예, ggplot2-plot에서 x 및 y 제한을 추출 할 수 있습니다. 이 기능은 X를 반환하고 Y는 ggplot2 플롯 객체의 중심 좌표 :

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]'와 비슷합니다. –