Создание пользовательских аннотаций только в одном аспекте ggplot
Есть ли способ указать, что custom_annotation
относится только к одному аспекту ggplot?
Например, если я запускаю следующий код
library(tidyverse)
library(grid)
text_grob=grobTree(textGrob("text",x=0.5, y=0.6, rot=90,
gp=gpar(col="red")))
ggplot(mtcars, aes(x=mpg, y =drat))+
geom_point() +
facet_wrap(~cyl) +
annotation_custom(overrep_grob)
Я понял
Как я могу сохранить только самую правую красную "текстовую" аннотацию и не добавлять "текстовую" аннотацию к первым двум фасетам? Обратите внимание, я не могу использовать geom_text
или же annotate
потому что мне нужно использовать относительное позиционирование текста textGrob
2 ответа
egg
имеет geom_custom
,
library(ggplot2)
library(grid)
library(egg)
d = data.frame(cyl=6, drat = 4, mpg = 15)
d$grob <- list(textGrob("text",rot=90, hjust = 0, gp=gpar(col="red")))
ggplot(mtcars, aes(x=mpg, y=drat))+
geom_point() +
facet_wrap(~cyl) +
geom_custom(data = d, aes(data = grob), grob_fun = identity)
Вы также можете сделать это с помощью geom_text
путем расчета относительной позиции необходимого текста. Обратите внимание, что здесь относительная позиция немного отличается от той, которую вы используете выше, потому что здесь я определяю относительную позицию как некоторую пропорцию динамического диапазона. Вы можете выбрать другое значение для rel, чтобы получить нужную вам позицию. Я считаю, что этот способ делает позиционирование менее произвольным.
library(tidyverse)
rel_pos <- function(.data, var, rel){
var <- enquo(var)
.data %>%
summarise(x = sum(max(!!var), min(!!var))* rel) %>% .[1, "x"]
}
my_text <- data_frame(mpg = rel_pos(mtcars, mpg, 0.5),
drat = rel_pos(mtcars, drat, 0.6) ,
cyl = 8, lab = "text")
ggplot(mtcars, aes(x=mpg, y =drat))+
geom_point() +
facet_wrap(~cyl)+
geom_text(data = my_text, aes(label = lab), color = "red", angle = 90)
Создано 2018-08-15 пакетом представлением (v0.2.0).