r - manipulation - ggtitle size
Ancho del cuadro de caja en ggplot con grupos clasificados cruzados (3)
Estoy haciendo diagramas de caja con ggplot con datos que están clasificados por 2 variables de factores. Me gustaría que los tamaños de los recuadros reflejen el tamaño de la muestra a través de varwidth = TRUE
pero cuando hago esto, los recuadros se superponen.
1) Algunos datos de muestra con una estructura de 3 x 2
data <- data.frame(group1= sample(c("A","B","C"),100, replace = TRUE),group2= sample(c("D","E"),100, replace = TRUE) ,response = rnorm(100, mean = 0, sd = 1))
2) diagramas de caja predeterminados: ggplot sin ancho variable
ggplot(data = data, aes(y = response, x = group1, color = group2)) + geom_boxplot()
Me gusta cómo se muestra el primer nivel de agrupación.
Ahora trato de agregar anchos variables ...
3) ... y lo que obtengo cuando varwidth = TRUE
ggplot(data = data, aes(y = response, x = group1, color = group2)) + geom_boxplot(varwidth = T)
Esta superposición parece ocurrir si utilizo color = group2
o group = group2
tanto en la llamada principal a ggplot
como en la declaración geom_boxplot
. Alborotar con position_dodge
tampoco parece ayudar.
4) Una solución que no me gusta visualmente es hacer factores únicos combinando mi grupo1 y mi grupo2
data$grp.comb <- paste(data$group1, data$group2)
ggplot(data = data, aes(y = response, x = grp.comb, color = group2)) + geom_boxplot()
Prefiero agrupar las cosas para reflejar la clasificación cruzada
5) El camino a seguir: quisiera a) averiguar cómo hacer que varwidth = TRUE
no haga que los recuadros se superpongan o b) ajustar manualmente el espacio entre los grupos combinados para que los recuadros dentro del primer nivel de agrupación sean más juntos.
Creo que tu problema se puede resolver mejor usando facet_wrap
.
library(ggplot2)
data <- data.frame(group1= sample(c("A","B","C"),100, replace = TRUE), group2=
sample(c("D","E"),100, replace = TRUE) ,response = rnorm(100, mean = 0, sd = 1))
ggplot(data = data, aes(y = response, x = group2, color = group2)) +
geom_boxplot(varwidth = TRUE) +
facet_wrap(~group1)
Esta pregunta se ha respondido aquí ggplot aumentar la distancia entre los diagramas de caja
La respuesta implica usar el argumento position = position_dodge()
de geom_boxplot()
.
Para tu ejemplo:
data <- data.frame(group1= sample(c("A","B","C"),100, replace = TRUE), group2=
sample(c("D","E"),100, replace = TRUE) ,response = rnorm(100, mean = 0, sd = 1))
ggplot(data = data, aes(y = response, x = group1, color = group2)) +
geom_boxplot(position = position_dodge(1))
Una actualización reciente de ggplot2 hace que el código provisto por @N Brouwer en (3) funcione de la manera esperada:
# library(devtools)
# install_github("tidyverse/ggplot2")
packageVersion("ggplot2") # works with v2.2.1.9000
library(ggplot2)
set.seed(1234)
data <- data.frame(group1= sample(c("A","B","C"), 100, replace = TRUE),
group2= sample(c("D","E"), 100, replace = TRUE),
response = rnorm(100, mean = 0, sd = 1))
ggplot(data = data, aes(y = response, x = group1, color = group2)) +
geom_boxplot(varwidth = T)
(Soy un nuevo usuario y no puedo publicar imágenes en línea) fig 1