Мне нужно использовать взаимодействие и группировку в моем сюжете, но дисплей выглядит некорректно. Я хотел бы, чтобы график выглядел как на рисунке 1, одно значение на оси x может иметь несколько коробчатых графиков на оси y. Например, на рисунке 2 вы можете увидеть, что «item25» дважды появляется на оси x, я бы хотел, чтобы он был как на рисунке 1. Пример кода для рисунка 2 показан ниже. Спасибо большое за вашу помощь.
library("ggplot2")
library("plyr")
df<-data.frame(I = c(25, 25, 25, 25, 25, 25,25,85, 85, 85,85,85,85,85,125,125,125,125, 125, 125), U = c(1,1,1,2,2,2,2, 1,1,1,1,2,2,2,1,1,1,2,2,2),
V =c(1.03, 1.06, 1.1,1.08,1.87,1.56,1.75,1.82, 1.85, 1.90,2.03, 2.06, 2.1,2.08,2.87,2.56,2.75,2.82, 2.85, 2.90), type=c(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2))
df1<-data.frame(I = c(26, 26,26,26,26,86,86,86,86,86, 86, 86, 86, 126,126,126,126,126, 126,126),U = c(1,1,1,2,2,1,1,1,1,1,2,2,2,1,1,1,1,2,2,2),
V =c(1.13, 1.24,1.3,1.17, 1.66,1.76,1.89, 1.90, 1.95,1.97,2.13, 2.24,2.3,2.17, 2.66,2.76,2.89, 2.90, 2.95,2.97), type=c(5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5))
main <- rbind(df,df1)
main$type <- as.factor(main$type)
main$I <- as.factor(main$I)
main$U <- as.factor(main$U)
main <- transform(main, type = revalue(type,c("2" = "type2", "5" = "type5")))
main <- transform(main, U = revalue(U,c("1" = "M", "2" = "F")))
main <- transform(main, I = revalue(I,c("25" = "item25", "85" = "item85", "125" = "item125", "26" = "item26", "86" = "item86", "126" = "item126")))
grp_keys <- unique(as.matrix(main[, c("U", "I")]))
grp_inds <- 1:nrow(grp_keys)
main$grps <- apply(main, 1, function(x) {
grp_inds[colSums(as.character(x[c("U", "I")]) == t(grp_keys)) == length(c("U", "I"))]
})
main$I_type <- interaction(main$I,main$grps)
main$I_type <- droplevels(main$I_type)
ggplot(aes(y = V, x = I_type), data = main) +
geom_boxplot(outlier.colour = NA, aes(color = type), size = 0.4,
position = 'identity', width = 0.3) +
scale_x_discrete(labels = sub("\\..*$", "", levels(main$I_type))) +
theme_bw() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Вот подход с использованием I
в качестве оси x и группирования по grps
для получения отдельных коробчатых диаграмм для каждой группы.
ggplot(aes(y = V, x = I, group = grps), data = main) +
geom_boxplot(outlier.colour = NA, aes(color = type), size = 0.4,
position = 'identity', width = 0.3) +
theme_bw() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))