Mantén la atención porque en este tutorial vas a encontrar el hallazgo que buscas.Este post fue evaluado por nuestros expertos para garantizar la calidad y exactitud de nuestro contenido.
Solución:
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 del factor, pero probablemente arrojará algunas advertencias:
Aquí está la trama sin anotaciones de texto:
library(ggplot2)
p <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
facet_grid(. ~ cyl) +
theme(panel.spacing = unit(1, "lines"))
p
Vamos a crear un marco de datos 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
)
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 = dat_text,
mapping = aes(x = x, y = y, label = label)
)
También podemos etiquetar parcelas en dos facetas:
dat_text <- data.frame(
cyl = c(4, 6, 8, 4, 6, 8),
am = c(0, 0, 0, 1, 1, 1)
)
dat_text$label <- sprintf(
"%s, %s cylinders",
ifelse(dat_text$am == 0, "automatic", "manual"),
dat_text$cyl
)
p +
facet_grid(am ~ cyl) +
geom_text(
size = 5,
data = dat_text,
mapping = aes(x = Inf, y = Inf, label = label),
hjust = 1.05,
vjust = 1.5
)
Notas:
- Puedes usar
-Inf
yInf
para colocar el texto en los bordes de un panel. - Puedes usar
hjust
yvjust
para ajustar la justificación del texto. - El marco de datos de la etiqueta de texto
dat_text
debe tener una columna que funcione con sufacet_grid()
ofacet_wrap()
.
Si alguien está buscando una manera fácil de etiquetar facetas para informes o publicaciones, la egg
(CRAN) tiene bastante ingenioso tag_facet()
& tag_facet_outside()
funciones
library(ggplot2)
p <- ggplot(mtcars, aes(qsec, mpg)) +
geom_point() +
facet_grid(. ~ am) +
theme_bw(base_size = 12)
# install.packages('egg', dependencies = TRUE)
library(egg)
etiqueta dentro
Defecto
tag_facet(p)
Nota: si desea mantener el texto y el fondo de la tira, intente agregar strip.text
y strip.background
de nuevo en theme
o quitar theme(strip.text = element_blank(), strip.background = element_blank())
del original tag_facet()
función.
tag_facet <- function(p, open = "(", close = ")", tag_pool = letters, x = -Inf, y = Inf,
hjust = -0.5, vjust = 1.5, fontface = 2, family = "", ...)
gb <- ggplot_build(p)
lay <- gb$layout$layout
tags <- cbind(lay, label = paste0(open, tag_pool[lay$PANEL], close), x = x, y = y)
p + geom_text(data = tags, aes_string(x = "x", y = "y", label = "label"), ..., hjust = hjust,
vjust = vjust, fontface = fontface, family = family, inherit.aes = FALSE)
Alinear arriba a la derecha y usar números romanos
tag_facet(p, x = Inf, y = Inf,
hjust = 1.5,
tag_pool = as.roman(1:nlevels(factor(mtcars$am))))
Alinear abajo a la izquierda y usar letras mayúsculas
tag_facet(p,
x = -Inf, y = -Inf,
vjust = -1,
open = "", close = ")",
tag_pool = LETTERS)
Defina sus propias etiquetas
my_tag <- c("i) 4 cylinders", "ii) 6 cyls")
tag_facet(p,
x = -Inf, y = -Inf,
vjust = -1, hjust = -0.25,
open = "", close = "",
fontface = 4,
size = 5,
family = "serif",
tag_pool = my_tag)
etiquetar afuera
p2 <- ggplot(mtcars, aes(qsec, mpg)) +
geom_point() +
facet_grid(cyl ~ am, switch = 'y') +
theme_bw(base_size = 12) +
theme(strip.placement = 'outside')
tag_facet_outside(p2)
Editar: agregando otra alternativa usando el paquete stickylabeller
- `.n` numbers the facets numerically: `"1"`, `"2"`, `"3"`...
- `.l` numbers the facets using lowercase letters: `"a"`, `"b"`, `"c"`...
- `.L` numbers the facets using uppercase letters: `"A"`, `"B"`, `"C"`...
- `.r` numbers the facets using lowercase Roman numerals: `"i"`, `"ii"`, `"iii"`...
- `.R` numbers the facets using uppercase Roman numerals: `"I"`, `"II"`, `"III"`...
# devtools::install_github("rensa/stickylabeller")
library(stickylabeller)
ggplot(mtcars, aes(qsec, mpg)) +
geom_point() +
facet_wrap(. ~ am,
labeller = label_glue('(.l) am = am')) +
theme_bw(base_size = 12)
Creado por el paquete reprex (v0.2.1)
Te mostramos las comentarios y valoraciones de los usuarios
Al final de la artículo puedes encontrar las reseñas de otros usuarios, tú además puedes mostrar el tuyo si lo crees conveniente.