Anotación de texto en faceta individual en ggplot2

Quiero anotar algún texto en la última faceta de la ttwig con el siguiente código:

library(ggplot2) p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p <- p + facet_grid(. ~ cyl) p <- p + annotate("text", label = "Test", size = 4, x = 15, y = 5) print(p) 

enter image description here

Pero este código anota el texto en cada faceta. Le agradecería mucho si me guía cómo obtener el texto anotado en una sola faceta. Gracias por adelantado.

Por lo general, harías algo como esto:

 ann_text <- data.frame(mpg = 15,wt = 5,lab = "Text", cyl = factor(8,levels = c("4","6","8"))) p + geom_text(data = ann_text,label = "Text") 

Debería funcionar sin especificar completamente la variable de factor, pero probablemente lanzará algunas advertencias:

enter image description here

Aquí está la ttwig sin anotaciones de texto:

 library(ggplot2) p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + facet_grid(. ~ cyl) + theme(panel.spacing = unit(1, "lines")) p 

trama sin anotaciones de texto

Vamos a crear un dataframe adicional para contener las anotaciones de texto:

 dat_text <- data.frame( label = c("4 cylinders", "6 cylinders", "8 cylinders"), cyl = c(4, 6, 8) ) p + geom_text( data = dat_text, mapping = aes(x = -Inf, y = -Inf, label = label), hjust = -0.1, vjust = -1 ) 

trazar con anotaciones de texto en los bordes

Alternativamente, podemos especificar manualmente la posición de cada etiqueta:

 dat_text <- data.frame( label = c("4 cylinders", "6 cylinders", "8 cylinders"), cyl = c(4, 6, 8), x = c(20, 27.5, 25), y = c(4, 4, 4.5) ) p + geom_text(data = ann_text,label = "Text") p + geom_text( data = dat_text, mapping = aes(x = x, y = y, label = label) ) 

trazar con etiquetas de texto posicionadas manualmente

Notas:

  • Puede usar -Inf e Inf para colocar texto en los bordes de un panel.
  • Puede usar hjust y vjust para ajustar la justificación del texto.
  • El dataframe de etiqueta de texto dat_text debe tener una columna que funcione con facet_grid() o facet_wrap() .

Creo que para la respuesta anterior lab = “Texto” es inútil, el siguiente código también está bien.

 ann_text <- data.frame(mpg = 15,wt = 5, cyl = factor(8,levels = c("4","6","8"))) p + geom_text(data = ann_text,label = "Text" ) 

Sin embargo, si desea etiquetar de manera diferente en diferentes sub-gráficos, estará bien de esta manera:

 ann_text <- data.frame(mpg = c(14,15),wt = c(4,5),lab=c("text1","text2"), cyl = factor(c(6,8),levels = c("4","6","8"))) p + geom_text(data = ann_text,aes(label =lab) )