ggplot geom_text geom_bar chart barplot bar adding r ggplot2

geom_bar - r ggplot geom_text position



Cómo poner etiquetas sobre geom_bar en R con ggplot2 (2)

Me gustaría tener algunas etiquetas apiladas encima de un gráfico de geom_bar . Aquí hay un ejemplo:

df <- data.frame(x=factor(c(TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE))) ggplot(df) + geom_bar(aes(x,fill=x)) + opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(),axis.title.x=theme_blank(),legend.title=theme_blank(),axis.title.y=theme_blank())

Ahora

mesa (df $ x)

FALSE TRUE 3 5

Me gustaría tener el 3 y 5 en la parte superior de las dos barras. Mejor aún si pudiera tener los valores porcentuales también. Ej. 3 (37.5%) y 5 (62.5%) . Al igual que:

es posible? ¿Si es así, cómo?


Al igual que con muchas tareas en ggplot, la estrategia general es colocar lo que le gustaría agregar a la trama en un marco de datos de manera que las variables coincidan con las variables y la estética de su trazado. Entonces, por ejemplo, crearías un nuevo marco de datos como este:

dfTab <- as.data.frame(table(df)) colnames(dfTab)[1] <- "x" dfTab$lab <- as.character(100 * dfTab$Freq / sum(dfTab$Freq))

De modo que la variable x coincide con la variable correspondiente en df , y así sucesivamente. Entonces simplemente lo incluye usando geom_text :

ggplot(df) + geom_bar(aes(x,fill=x)) + geom_text(data=dfTab,aes(x=x,y=Freq,label=lab),vjust=0) + opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(), axis.title.x=theme_blank(),legend.title=theme_blank(), axis.title.y=theme_blank())

Este ejemplo trazará solo los porcentajes, pero también puede paste los recuentos a través de algo como esto:

dfTab$lab <- paste(dfTab$Freq,paste("(",dfTab$lab,"%)",sep=""),sep=" ")

Tenga en cuenta que en la versión actual de ggplot2, opts está en desuso, por lo que ahora element_blank theme y element_blank .


Para trazar texto en un ggplot , usa el geom_text . Pero me parece útil resumir los datos primero usando ddply

dfl <- ddply(df, .(x), summarize, y=length(x)) str(dfl)

Dado que los datos están resumidos previamente, debe recordar cambiar para agregar el parámetro stat="identity" a geom_bar :

ggplot(dfl, aes(x, y=y, fill=x)) + geom_bar(stat="identity") + geom_text(aes(label=y), vjust=0) + opts(axis.text.x=theme_blank(), axis.ticks=theme_blank(), axis.title.x=theme_blank(), legend.title=theme_blank(), axis.title.y=theme_blank() )