varias texto superponer grafico graficas ggplot cuadro bar agregar r ggplot2 geom-bar geom-text

superponer - geom_text ¿cómo colocar el texto en la barra como quiero?



superponer graficas en r ggplot (2)

Me gustaría ajustar el texto en la gráfica de barras.

Intenté ajustar hjust / vjust para mostrarlo como me gusta, pero parece que no funciona correctamente.

ggplot(data) + geom_bar(aes(name, count, fill = week), stat=''identity'', position = ''dodge'') + geom_text(aes(name,count, label=count),hjust=0.5, vjust=3, size=2, position = position_dodge(width = 1)) + coord_flip()

Así que me gustaría que los números se ubicaran en cada barra, en el centro, en el borde derecho para que se pueda leer sin superponerse como las últimas partes.


Editar:

La solución más fácil para lograr que hjust / vjust comporte de manera inteligente es agregar la estética del group a geom_text y luego hjust & position ajustar para el group automáticamente.

1. Orientación vertical

ggplot(data) + geom_bar( aes(x = name, y = count, fill = week, group = week), stat=''identity'', position = ''dodge'' ) + geom_text( aes(x = name, y = count, label = count, group = week), position = position_dodge(width = 1), vjust = -0.5, size = 2 ) + theme_bw()

Esto da:

2. Orientación horizontal

ggplot(data) + geom_bar( aes(x = name, y = count, fill = week, group = week), stat=''identity'', position = ''dodge'' ) + geom_text( aes(x = name, y = count, label = count, group = week), hjust = -0.5, size = 2, position = position_dodge(width = 1), inherit.aes = TRUE ) + coord_flip() + theme_bw()

Esto da:

Esta no es necesariamente la forma más general de hacer esto, pero puede tener una hjust (o vjust , dependiendo de la orientación) dependiente del fill . No me queda del todo claro cómo seleccionar el valor del parámetro de ajuste, y actualmente se basa en lo que parece correcto. Quizás alguien más pueda sugerir una forma más general de elegir este valor de parámetro.

1. Orientación vertical

library(dplyr) library(ggplot2) # generate some data data = data_frame( week = as.factor(rep(c(1, 2), times = 5)), name = as.factor(rep(LETTERS[1:5], times = 2)), count = rpois(n = 10, lambda = 20), hjust = if_else(week == 1, 5, -5), vjust = if_else(week == 1, 3.5, -3.5) ) # Horizontal ggplot(data) + geom_bar( aes(x = name, y = count, fill = week, group = week), stat=''identity'', position = ''dodge'' ) + geom_text( aes(x = name, y = count, label = count, vjust = vjust), hjust = -0.5, size = 2, inherit.aes = TRUE ) + coord_flip() + theme_bw()

Esto es lo que parece:

2. Orientación horizontal

ggplot(data) + geom_bar( aes(x = name, y = count, fill = week, group = week), stat=''identity'', position = ''dodge'' ) + geom_text( aes(x = name, y = count, label = count, vjust = vjust), hjust = -0.5, size = 2, inherit.aes = TRUE ) + coord_flip() + theme_bw()

Esto es lo que parece:


La sentencia position_dodge() toma un parámetro de ancho. Para asegurarse de que el texto esté centrado al final de las barras (es decir, el ancho de esquivamiento para que las barras y el texto sean iguales), proporcione el mismo parámetro de ancho a la declaración position_dodge() dentro de geom_bar y dentro de geom_text .

También hay un parámetro de ancho para geom_bar , que es el ancho de las barras. Si desea que las barras se junten unas con otras dentro de cada name , haga que el ancho de la barra sea igual al ancho de esquivar; Si desea un pequeño espacio entre las barras, haga que el ancho de la barra sea un poco menor que el ancho de esquivado.

Si utiliza la estética global, no necesitará una estética de group (sin embargo, si solo utiliza la estética local, necesitará una estética de grupo para geom_text ).

hjust = -0.5 colocará las etiquetas de texto justo más allá del final de las barras; hjust = 1.5 coloca dentro del final de las barras.

library(ggplot2) # Generate some data - using @tchakravarty''s data - Thanks. df = data.frame( week = as.factor(rep(c(1, 2), times = 5)), name = as.factor(rep(LETTERS[1:5], times = 2)), count = rpois(n = 10, lambda = 20)) position = position_dodge(width = .75) width = .75 ggplot(df, aes(x = name, y = count, label = count, fill = week)) + geom_bar(width = width, stat=''identity'', position = position) + geom_text(hjust = -0.5, size = 2, position = position) + coord_flip() + theme_bw() # To separate the bars slightly: position = position_dodge(width = .75) width = .65 ggplot(df, aes(x = name, y = count, label = count, fill = week)) + geom_bar(width = width, stat=''identity'', position = position) + geom_text(hjust = -0.5, size = 2, position = position) + coord_flip() + theme_bw()