Относительное расположение geom_text в ggplot2? - PullRequest
10 голосов
/ 30 сентября 2011

Я использую geom_text для аннотирования графиков в gglot2, и я хочу использовать относительное позиционирование, а не абсолютное. То есть я хочу, чтобы позиция (0.5, 0.5) была мертвой точкой независимо от ограничений по осям x и y. Это возможно?

В качестве альтернативы я мог бы, конечно, преобразовать относительную позицию в абсолютную, если бы у меня были пределы x и y. Можно ли извлечь их из сюжета?

Ответы [ 2 ]

7 голосов
/ 01 октября 2011

Если вам известен диапазон данных на вашем графике, вы можете рассчитать «истинные» пределы x и y, используя тот факт, что ggplot использует аддитивный коэффициент расширения 0,05 по умолчанию, так что границы графика расширить немного за пределы фактических значений данных.

Вы можете указать и коэффициент мультипликативного и аддитивного расширения при указании шкал, используя expand = c(mult, add), где mult - коэффициент мультипликативного и т. Д. Поэтому по умолчанию установлено значение expand = c(0,0.05).

2 голосов
/ 10 июня 2016

Да, можно извлечь пределы x и y из графика ggplot2.Эта функция возвращает координаты 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")
...