r - ggplot - how to use geom_text
ggplot2: ¿Hay alguna solución para el texto irregular y de baja calidad producido por geom_text()? (1)
Al agregar texto de anotación a un trazado, noté que geom_text()
producía un texto desagradable y geom_text()
, mientras que annotate()
producía un texto suave y agradable. ¿Alguien sabe por qué sucede esto y si hay alguna forma de solucionarlo? Sé que podría usar annotate()
aquí, pero probablemente haya casos en los que sea preferible geom_text()
y me gustaría encontrar una solución. Además, geom_text()
no puede estar destinado a dar un texto de aspecto pobre, así que o bien estoy haciendo algo mal o me he encontrado con algún tipo de efecto secundario sutil.
Aquí hay algunos datos falsos y el código para producir el gráfico, más una imagen que muestra los resultados.
library(ggplot2)
age = structure(list(age = c(41L, 40L, 43L, 44L, 40L, 42L, 44L, 45L,
44L, 41L, 43L, 40L, 43L, 43L, 40L, 42L, 43L, 44L, 43L, 41L)),
.Names = "age", row.names = c(NA, -20L), class = "data.frame")
ggplot(age, aes(age)) +
geom_histogram() +
scale_x_continuous(breaks=seq(40,45,1)) +
stat_bin(binwidth=1, color="black", fill="blue") +
geom_text(aes(41, 5.2,
label=paste("Average = ", round(mean(age),1))), size=12) +
annotate("text", x=41, y=4.5,
label=paste("Average = ", round(mean(age$age),1)), size=12)
geom_text
, a pesar de no usar nada directamente de data.frame de age
, todavía lo está usando para su fuente de datos. Por lo tanto, está poniendo 20 copias de "Promedio = 42.3" en la trama, una para cada fila. Es esa sobrescritura múltiple lo que lo hace parecer tan malo. geom_text
está diseñado para poner texto en un gráfico donde la información proviene de un data.frame (que se da, ya sea directa o indirectamente en la llamada ggplot
original). annotate
está diseñado para adiciones simples geom_text
como las que tiene (crea un geom_text
, cuidando la fuente de datos).
Si realmente quieres usar geom_text()
, solo reinicia la fuente de datos:
ggplot(age, aes(age)) +
scale_x_continuous(breaks=seq(40,45,1)) +
stat_bin(binwidth=1, color="black", fill="blue") +
geom_text(aes(41, 5.2,
label=paste("Average = ", round(mean(age$age),1))), size=12,
data = data.frame()) +
annotate("text", x=41, y=4.5,
label=paste("Average = ", round(mean(age$age),1)), size=12)