inside how ggplot geom_text geom_label_repel adding r ggplot2

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)