geom_bar - r ggplot geom_text position
¿Cómo imponer position_dodge de ggplot en categorías sin datos? (3)
Acabo de recibir una pista para usar el facetado de uno de los comentarios publicados por Hadley en su github.com/hadley/ggplot2/issues/688 git, ¡así que los créditos son para Hadley, el mantenedor del paquete ggplot2!
A ver si esto es lo que querías. Para obtener más información sobre las opciones para configurar los bigotes y otros en este gráfico, consulte esta página de ayuda en el paquete ggplot2:
?stat_boxplot
data<-data.frame(cat=c(''A'',''A'',''A'',''A'',''B'',''B'',''A'',''A'',''A'',''A'',''B'',''B''),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9),
ind=c(''x'',''x'',''x'',''x'',''x'',''x'',''y'',''y'',''y'',''y'',''y'',''y''))
p <- ggplot(data = data, aes(factor(cat), values))
p + stat_boxplot(geom="boxplot", position = "dodge", width = 0.60, na.rm = TRUE) + facet_grid(.~ind)
Para agregar colores a su trazado, que en mi opinión es redundante, ya que ya está facetando el trazado basado en la variable "ind", intente esto:
p <- ggplot(data, aes(factor(cat), values, fill = ind))
p + stat_boxplot(geom="boxplot", position = "dodge", width = 0.60, na.rm = TRUE) + facet_grid(.~ind)
HTH!
Estoy tratando de usar position_dodge en ggplot para obtener diagramas de caja de dos señales diferentes (ind) que comparten las mismas categorías (cat). Cuando hay una categoría con datos para una señal pero no para la otra, el diagrama de caja para la señal con datos cubre todo el espaciado horizontal y no respeta la instrucción position_dodge para esa categoría en particular. ¿Hay una manera de hacer ggplot para hacer cumplir la regla de esquivar? Como puede ver en el ejemplo a continuación, la señal x no tiene datos para la categoría B, por lo que pierde el espacio reservado por position_dodge. Me gustaría evitar eso.
Gracias por adelantado.
data<-data.frame(cat=c(''A'',''A'',''A'',''A'',''B'',''B'',''A'',''A'',''A'',''A'',''B'',''B''),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9),
ind=c(''x'',''x'',''x'',''x'',''x'',''x'',''y'',''y'',''y'',''y'',''y'',''y''))
print(ggplot() +
scale_colour_hue(guide=''none'') +
geom_boxplot(
aes(x=as.factor(cat), y=values,
fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T))
PROGRESO DE LA ACTUALIZACIÓN
Después de algunas soluciones, encontré el resultado que estaba buscando ... (tipo de)
data <- data.frame(
cat=c(''A'',''A'',''A'',''A'',''B'',''B'',''A'',''A'',''A'',''A'',''B'',''B'',''B''),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9, 0),
ind=c(''x'',''x'',''x'',''x'',''x'',''x'',''y'',''y'',''y'',''y'',''y'',''y'',''x''))
p <- ggplot() +
scale_colour_hue(guide=''none'') +
geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T) +
geom_line(aes(x=x, y=y),
data=data.frame(x=c(0,3),y=rep(0,2)),
size = 1,
col=''white'')
print(p)
Algunas personas recomendaron el uso de facetas para el efecto que yo quería. El facetado no me da el efecto que estoy buscando. El gráfico final que estaba buscando se muestra a continuación:
Si observa, la marca de verificación principal blanca en y = 10 es más gruesa que las otras marcas de verificación. Esta línea más gruesa es la geom_line con tamaño = 1 que oculta diagramas de caja no deseados.
Ojalá pudiéramos combinar diferentes objetos geom de manera más perfecta. Informé de esto como un error en el github de Hadley, pero Hadley dijo que así es como se comporta position_dodge por diseño. Supongo que estoy usando ggplot2 de una manera no estándar y las soluciones son la manera de abordar este tipo de problemas. De todos modos, espero que esto ayude a algunas de las personas de R a impulsar un poco más la funcionalidad de ggplot.
Después de algunas soluciones, encontré el resultado que estaba buscando ... (tipo de)
data <- data.frame(
cat=c(''A'',''A'',''A'',''A'',''B'',''B'',''A'',''A'',''A'',''A'',''B'',''B'',''B''),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9, 0),
ind=c(''x'',''x'',''x'',''x'',''x'',''x'',''y'',''y'',''y'',''y'',''y'',''y'',''x''))
p <- ggplot() +
scale_colour_hue(guide=''none'') +
geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T) +
geom_line(aes(x=x, y=y),
data=data.frame(x=c(0,3),y=rep(0,2)),
size = 1,
col=''white'')
print(p)
Algunas personas recomendaron usar facetado para el efecto que yo quería. El facetado no me da el efecto que estoy buscando. El gráfico final que estaba buscando se muestra a continuación:
Si observa, la marca de verificación principal blanca en y = 10 es más gruesa que las otras marcas de verificación. Esta línea más gruesa es la geom_line con tamaño = 1 que oculta diagramas de caja no deseados.
Ojalá pudiéramos combinar diferentes objetos geom de manera más perfecta. Informé de esto como un error en el github de Hadley, pero Hadley dijo que así es como se comporta position_dodge por diseño. Supongo que estoy usando ggplot2 de una manera no estándar y las soluciones son la manera de abordar este tipo de problemas. De todos modos, espero que esto ayude a algunas de las personas de R a impulsar un poco más la funcionalidad de ggplot.
x de B no tiene valores, por lo que puede agregar "B", 0, "x" que esencialmente indica que no hay una distribución de "valores" para x de B. La mediana y otros percentiles son cero.
data<-data.frame(cat=c(''A'',''A'',''A'',''A'',''B'',''B'',''A'',''A'',''A'',''A'',''B'',''B'',''B''),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9,0),
ind=c(''x'',''x'',''x'',''x'',''x'',''x'',''y'',''y'',''y'',''y'',''y'',''y'',''x''))
Además, no tiene que agregar parámetros de posición aquí, porque cuando considera x como un factor, ggplot - geom_boxplot se esquivará automáticamente a los lados.
print(ggplot() +
scale_colour_hue(guide=''none'') +
geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
data=data,
outlier.size = 1.2,
na.rm=T))