2016-10-03 3 views
1

4 개의 실험에 대해 동일한 차트를 포함하는 패널에서 누적 막 대형 차트 + 2 방향 상호 작용을 플롯하려고합니다. 그러나 독립 변수 중 하나에 따라 바를 피할 수 없었습니다. 아래는 나의 데이터입니다.ggplot2 : 3 방향 상호 작용 스택 막대 막대 그림 그룹화

먼저 아래 코드로 데이터를 읽었습니다.

둘째

Exp. \t Gest \t lag \t Sint12 \t Rev12 \t c12 \t t1pi \t t2pi \t t1i \t t2i \t IntWeak \t inc \t Total 
 
1 \t 1 \t 1 \t 15,88 \t 3,28 \t 22,52 \t 11,76 \t 4,08 \t 2,28 \t 16,76 \t 3,24 \t 20,2 \t 100 
 
1 \t 1 \t 3 \t 0,88 \t 1,2 \t 61,36 \t 11,84 \t 8,4 \t 1,84 \t 2,32 \t 0,8 \t 11,36 \t 100 
 
1 \t 1 \t 8 \t 0,24 \t 0,24 \t 65,2 \t 10,24 \t 9,2 \t 1,84 \t 2,4 \t 0,48 \t 10,16 \t 100 
 
1 \t 2 \t 1 \t 14,96 \t 4 \t 25,28 \t 15,12 \t 1,92 \t 0,68 \t 16,8 \t 1,56 \t 19,68 \t 100 
 
1 \t 2 \t 3 \t 1,2 \t 0,72 \t 79,36 \t 8,64 \t 2,88 \t 0,64 \t 0,64 \t 0,64 \t 5,28 \t 100 
 
1 \t 2 \t 8 \t 0,16 \t 0,16 \t 86,72 \t 5,36 \t 3,2 \t 0,08 \t 0,48 \t 0,64 \t 3,2 \t 100 
 
2 \t 1 \t 1 \t 30,6 \t 2,2 \t 24,48 \t 4,56 \t 1,32 \t 0,4 \t 17,8 \t 1 \t 17,64 \t 100 
 
2 \t 1 \t 3 \t 0,96 \t 1,04 \t 87,2 \t 5,04 \t 2,16 \t 0,16 \t 0,4 \t 0,8 \t 2,24 \t 100 
 
2 \t 1 \t 8 \t 0,88 \t 0,24 \t 91,92 \t 3,28 \t 1,52 \t 0 \t 0,32 \t 0,88 \t 0,96 \t 100 
 
2 \t 2 \t 1 \t 20,16 \t 2,32 \t 16,52 \t 14,24 \t 0,72 \t 0,44 \t 15,96 \t 1,76 \t 27,88 \t 100 
 
2 \t 2 \t 3 \t 1,04 \t 0,64 \t 83,84 \t 5,84 \t 2 \t 0,08 \t 0,72 \t 1,12 \t 4,72 \t 100 
 
2 \t 2 \t 8 \t 0,24 \t 0 \t 91,04 \t 4,16 \t 1,52 \t 0,08 \t 0 \t 0,72 \t 2,24 \t 100 
 
3A \t 1 \t 1 \t 35,83 \t 3,92 \t 27,42 \t 2,42 \t 2,08 \t 0,25 \t 7,42 \t 3,63 \t 17,04 \t 100,01 
 
3A \t 1 \t 3 \t 1,58 \t 1 \t 81 \t 4,5 \t 3,33 \t 0,25 \t 0,33 \t 1,08 \t 6,92 \t 99,99 
 
3A \t 1 \t 8 \t 1 \t 0 \t 86,92 \t 3,17 \t 1,75 \t 0,08 \t 0,42 \t 0,33 \t 6,33 \t 100 
 
3A \t 2 \t 1 \t 43,46 \t 2,38 \t 21,29 \t 1,88 \t 1,17 \t 0,17 \t 5,46 \t 4,21 \t 20 \t 100,02 
 
3A \t 2 \t 3 \t 2 \t 0,75 \t 78,67 \t 3,75 \t 3,25 \t 0,17 \t 0,83 \t 0,92 \t 9,67 \t 100,01 
 
3A \t 2 \t 8 \t 1,33 \t 0,33 \t 83,25 \t 3 \t 2,17 \t 0 \t 0,67 \t 0,83 \t 8,42 \t 100 
 
3B \t 1 \t 1 \t 35,5 \t 2,54 \t 29,33 \t 3,04 \t 1,88 \t 0,54 \t 7,46 \t 7,46 \t 12,25 \t 100 
 
3B \t 1 \t 3 \t 1,58 \t 0,67 \t 79,42 \t 4,58 \t 2,83 \t 0,42 \t 0,67 \t 2,75 \t 7,08 \t 100 
 
3B \t 1 \t 8 \t 0,83 \t 0,17 \t 88,83 \t 3,17 \t 2,83 \t 0,08 \t 0,42 \t 0,5 \t 3,17 \t 100 
 
3B \t 2 \t 1 \t 32,33 \t 1,75 \t 17,21 \t 4,5 \t 2,21 \t 0,42 \t 13,21 \t 4,96 \t 23,42 \t 100,01 
 
3B \t 2 \t 3 \t 2,5 \t 0,25 \t 67,58 \t 8,42 \t 4,25 \t 0,5 \t 1 \t 4,58 \t 10,92 \t 100 
 
3B \t 2 \t 8 \t 1 \t 0,08 \t 76,83 \t 6,25 \t 4,5 \t 0,08 \t 0,33 \t 3 \t 7,92 \t 99,99
a<-read.table(file.choose(), header=T, dec=",") 

나는 아래의 코드 긴 형식으로 폭을 변형.

b <- reshape(a, 
     varying = c("Sint12", "Rev12", "c12", "t1pi", "t2pi", "t1i", "t2i", "IntWeak", "inc"), 
     v.names = "score", 
     timevar = "variable", 
     times = c("Sint12", "Rev12", "c12", "t1pi", "t2pi", "t1i", "t2i", "IntWeak", "inc"), 
     new.row.names = 1:1000, 
     direction = "long") 

그리고 데이터를 변환 한 후 같은 아래에 보이는 :

Exp. Gest lag Total variable score id 
 
1  1 1 1 100.00 Sint12 15.88 1 
 
2  1 1 3 100.00 Sint12 0.88 2 
 
3  1 1 8 100.00 Sint12 0.24 3 
 
4  1 2 1 100.00 Sint12 14.96 4 
 
5  1 2 3 100.00 Sint12 1.20 5 
 
6  1 2 8 100.00 Sint12 0.16 6 
 
7  2 1 1 100.00 Sint12 30.60 7 
 
8  2 1 3 100.00 Sint12 0.96 8 
 
9  2 1 8 100.00 Sint12 0.88 9 
 
10  2 2 1 100.00 Sint12 20.16 10 
 
11  2 2 3 100.00 Sint12 1.04 11 
 
12  2 2 8 100.00 Sint12 0.24 12 
 
13 3A 1 1 100.01 Sint12 35.83 13 
 
14 3A 1 3 99.99 Sint12 1.58 14 
 
15 3A 1 8 100.00 Sint12 1.00 15 
 
16 3A 2 1 100.02 Sint12 43.46 16 
 
17 3A 2 3 100.01 Sint12 2.00 17 
 
18 3A 2 8 100.00 Sint12 1.33 18 
 
19 3B 1 1 100.00 Sint12 35.50 19 
 
20 3B 1 3 100.00 Sint12 1.58 20 
 
21 3B 1 8 100.00 Sint12 0.83 21 
 
22 3B 2 1 100.01 Sint12 32.33 22 
 
23 3B 2 3 100.00 Sint12 2.50 23 
 
24 3B 2 8 99.99 Sint12 1.00 24

I가 원하는 것은; 1 위. 4 개의 플롯 (각 실험마다), 2. Gest와 Lag에 의한 상호 작용 플롯 만들기. 3rd; 변수의 색상으로 스택을 채 웁니다.

이렇게하려면 아래 코드를 사용했습니다.

ggplot (데이터 = b, aes (x = 상호 작용 (Gest, lag), y = 점수, 채우기 = 변수)) + geom_bar (stat = "identity") + facet_wrap (~ Exp., ncol = 2)

Plot

지금, 줄거리는 준비가되어 있습니다. 그러나 geom_bar에 position = dodge 인수를 전달할 때; 작동하지 않습니다. 나는 1.1 & 2.1 사이의 틈이없는 음모를 갖고 싶다. 1.3 & 2.3 및 1.8 & 2.8 (X 축 라벨). 또한 .1-.3과 .8 사이의 간격을 지정하고 싶습니다.

미리 감사드립니다.

답변

0

"작동하지 않는다"는 것은 무엇을 의미합니까? 내가 그것을 추가했을 때, 나는 바를 정확하게 피할 음모가있다.

방금 ​​간격을 수정하려는 의미라면 x에 따라 플롯 된 요소에 추가 (빈) 수준을 추가하여 간격을 수정할 수 있습니다. 추가 레벨의 각 공간의 다른 수 있다는 것을 참고 : cowplot 패키지를 사용하는 경우

ggplot(data=b 
     , aes(x= factor(interaction(Gest, lag) 
         , levels = c(1.1,2.1," ",1.3,2.3," ",1.8,2.8)) 
      ,y=score, fill = variable)) + 
    geom_bar(stat="identity", position = "dodge") + 
    facet_wrap(~Exp., ncol=2) + 
    scale_x_discrete(drop = FALSE) 

enter image description here

당신은 더 몇 단계를 갈 수 있습니다. 여기서 이점은 각 실험 플롯을 개별적으로 작성하는 경우 변수에서 패 시팅을 수행 할 수 있다는 것입니다. 그런 다음 함께 꿰맬 수 있습니다. 여기에서는 개별 범례를 숨기고 하단에 공유 공통 범례를 추가했습니다.

sepPlots <- lapply(unique(b$Exp.), function(thisExp){ 
    b %>% 
    filter(Exp. == thisExp) %>% 
    ggplot(aes(x = as.factor(Gest) 
       , y = score 
       , fill = variable)) + 
    geom_bar(stat="identity", position = "dodge") + 
    facet_wrap(~lag, nrow = 1 
       , labeller = label_both 
       , switch = "x") + 
    xlab("Gest") + 
    ggtitle(paste("Experiment:", thisExp)) 

}) 


expPlots <- 
    plot_grid(plotlist = lapply(sepPlots, function(x){x + guides(fill = "none")})) 

plot_grid(expPlots 
      , get_legend(sepPlots[[1]] + theme(legend.direction = "horizontal")) 
      , nrow = 2 
      , rel_heights = c(1, 0.1)) 

enter image description here

+0

고마워요 마크, 나는 다음과 같은 추가 격차를 추가하려고했다. 귀하가 제공 한 추가 정보를 사용하겠습니다.Thanks again again :) 질문 : 마지막 플롯 (sePlots로 시작)의 첫 번째 코드를 붙여 넣을 때 FUN (X [ [i]], ...) : 함수 "%> %"을 (를) 찾을 수 없습니다. 어쨌든 고마워요. –

+0

죄송합니다. '%> %'는 파이프 문자이고'filter' 함수는'dplyr' (이것은 원래'magrittr '에서 왔지만'%> %'도로드합니다)에 있습니다. 보통 나는 그 의존성을 나열하는 것을 기억하는 것이 좋습니다. –

+0

다시 한번 감사드립니다. –

관련 문제