2017-11-24 21 views
4

R에서 그룹화 된 boxplot을 만들려고 노력 중입니다. 두 그룹이 있습니다 : A와 B, 각 그룹에 5 개의 측정 값이있는 3 개의 하위 그룹이 있습니다. R에 그룹화 된 상자 그림을 만드는 방법은 무엇입니까?

다음

내가 상자 그림을 구성하는 방식이지만, 사람이 할 수있는 더 좋은, 더 짧거나 쉬운 방법이 있다면, 내가

A1 <- c(1,2,9,6,4) 
A2 <- c(5,1,9,2,3) 
A3 <- c(1,2,3,4,5) 
B1 <- c(2,4,6,8,10) 
B2 <- c(0,3,6,9,12) 
B3 <- c(1,1,2,8,7) 

DF <- data.frame(A1, A2, A3, B1, B2, B3) 

boxplot(DF, col = rainbow(3, s = 0.5)) 
axis(side = 1, at = c(2,5), labels = c("A","B")) 
legend("topleft", fill = rainbow(3, s = 0.5), legend = c(1,2,3), horiz = T) 

enter image description here

을 주셔서 감사합니다 어떻게 제대로 I 그룹 수 A와 B의 박스를 (접합) 상자에 넣고, 시도한대로 축 제목을 단순한 A와 B로 수정하십시오.

나는

enter image description here

답변

3

데이터가 형식 부사장 넓은에있을 때 그것은이 같은 그룹을보다 쉽게 ​​뭔가를하고 싶습니다.

DF2 <- data.frame(
    x = c(c(A1, A2, A3), c(B1, B2, B3)), 
    y = rep(c("A", "B"), each = 15), 
    z = rep(rep(1:3, each=5), 2), 
    stringsAsFactors = FALSE 
) 
str(DF2) 
# 'data.frame': 30 obs. of 3 variables: 
# $ x: num 1 2 9 6 4 5 1 9 2 3 ... 
# $ y: chr "A" "A" "A" "A" ... 
# $ z: int 1 1 1 1 1 2 2 2 2 2 ... 

cols <- rainbow(3, s = 0.5) 
boxplot(x ~ z + y, data = DF2, 
     at = c(1:3, 5:7), col = cols, 
     names = c("", "A", "", "", "B", ""), xaxs = FALSE) 
legend("topleft", fill = cols, legend = c(1,2,3), horiz = T) 

at의 사용은 수동으로 위치를 제어하는, 그래서 "비주얼 그룹은"매우 강력한되지 않습니다 : 당신의 벡터 시작. (당신은 width 및/또는 boxwex 그들 사이의 간격을 제어 할 수 있습니다.)

base R boxplot

을 또한 ggplot2를 선택할 수 있습니다 :

library(ggplot2) 
ggplot(DF2, aes(y, x, fill=factor(z))) + 
    geom_boxplot() 

ggplot boxplot

2

당신은 사용해야 ggplot2

ggplot() + 
    geom_boxplot(data = df, mapping = aes(col_name, value, fill=index)) + 
    theme(axis.text.x = element_blank()) + 
    geom_segment(data=hline1, mapping=aes(x=1, y=-0.5, xend=3, yend=-0.5), size=2) + 
    annotate("text", x = 2, y = -1, label = "A") + 
    geom_segment(data=hline1, mapping=aes(x=4, y=-0.5, xend=6, yend=-0.5), size=2) + 
    annotate("text", x = 5, y = -1, label = "B") 

enter image description here