2017-04-16 1 views
1

나는 ggplot에서 만들어진 누적 막대 차트를 파악하려고합니다. 나는 here 게시 된 예제를 따랐다. 작도의 왼쪽에 누적 막대의 순서를 제외한 모든 것이 작동합니다. 내가 읽은 바로는ggplot의 누적 막대 순서

diverging stacked bar chart

은, 기본값은 바 그들이 내 데이터 프레임에 순서대로 적층되어 있어야하지만 그들은 아니에요. 나는 나의 데이터 프레임이 "매우 동의하지 않음", "대부분 동의하지 않음", "중간 쯤"이라는 명령을 가지고 있는지 확인했다. 그러나 그들은 "대부분 동의하지 않음", "중간 쯤", "강력하게 반대"라는 순서로 꾸몄다. 그것은 알파벳 순서조차도 아니기 때문에 왜 그렇게하는지 확신 할 수 없습니다.

library(ggplot2) 
    library(reshape2) 
    library(RColorBrewer) 
    library(dplyr) 
    library(ggthemes) 
    library(stringr) 

    my.data<-read.csv("survey_data.csv") 

    my.title <- "My title" 
    my.levels<-c("Strongly Disagree", "Mostly Disagree", "Neutral", "Mostly Agree", "Strongly Agree") 
    my.colors <- c("#CA0020", "#F4A582", "#DFDFDF", "#DFDFDF", "#92C5DE", "#0571B0") 
    my.legend.colors <- c("#CA0020", "#F4A582", "#DFDFDF", "#92C5DE", "#0571B0") 
    my.lows <- my.data[1:24,] 
    my.highs <- my.data[25:48,] 
    by.outcome=group_by(my.highs,outcome) 
    my.order <- summarize(by.outcome, value.sum=sum(value)) 
    my.vector <- seq(1,8) 
    for(i in 1:8) {my.vector[i] <- my.order[[2]][i]} 
    new.factor.levels <- my.order[[1]][order(my.vector)] 
    my.lows$outcome <- factor(my.lows$outcome,levels = new.factor.levels) 
    my.highs$outcome <- factor(my.highs$outcome,levels = new.factor.levels) 

    ggplot() + geom_bar(data=my.highs, aes(x=outcome, y=value, fill=color), position="stack", stat="identity") + 
    geom_bar(data=my.lows, aes(x=outcome, y=-value, fill=color), position="stack", stat="identity") + 
    geom_hline(yintercept=0, color =c("white")) + 
    scale_fill_identity("Percent", labels = my.levels, breaks=my.legend.colors, guide="legend") + 
    coord_flip() + 
    labs(title=my.title, y="",x="") + 
    theme(plot.title = element_text(size=14, hjust=0.5)) + 
    theme(axis.text.y = element_text(hjust=0)) + 
    theme(legend.position = "bottom") + 
    scale_y_continuous(breaks=seq(-100,100,25), limits=c(-100,100)) 

가 여기 내 데이터 프레임의 : 여기

내 코드의

 outcome  variable  value  color 
    1  cat1  Strongly Disagree 7.0212766 #CA0020 
    2  cat2  Strongly Disagree 1.0909091 #CA0020 
    3  cat3  Strongly Disagree 0.5763689 #CA0020 
    4  cat4  Strongly Disagree 1.8181818 #CA0020 
    5  cat5  Strongly Disagree 2.5000000 #CA0020 
    6  cat6  Strongly Disagree 1.2750455 #CA0020 
    7  cat7  Strongly Disagree 1.0964912 #CA0020 
    8  cat8  Strongly Disagree 1.0416667 #CA0020 
    9  cat1  Mostly Disagree 7.0212766 #F4A582 
    10 cat2  Mostly Disagree 1.0909091 #F4A582 
    11 cat3  Mostly Disagree 1.1527378 #F4A582 
    12 cat4  Mostly Disagree 1.3636364 #F4A582 
    13 cat5  Mostly Disagree 10.0000000 #F4A582 
    14 cat6  Mostly Disagree 0.7285974 #F4A582 
    15 cat7  Mostly Disagree 1.3157895 #F4A582 
    16 cat8  Mostly Disagree 1.0416667 #F4A582 
    17 cat1    Midlow 19.4680851 #DFDFDF 
    18 cat2    Midlow 9.0909091 #DFDFDF 
    19 cat3    Midlow 8.0691643 #DFDFDF 
    20 cat4    Midlow 12.9545454 #DFDFDF 
    21 cat5    Midlow 18.7500000 #DFDFDF 
    22 cat6    Midlow 9.5628415 #DFDFDF 
    23 cat7    Midlow 9.2105263 #DFDFDF 
    24 cat8    Midlow 7.8125000 #DFDFDF 
    25 cat1    Midhigh 19.4680851 #DFDFDF 
    26 cat2    Midhigh 9.0909091 #DFDFDF 
    27 cat3    Midhigh 8.0691643 #DFDFDF 
    28 cat4    Midhigh 12.9545454 #DFDFDF 
    29 cat5    Midhigh 18.7500000 #DFDFDF 
    30 cat6    Midhigh 9.5628415 #DFDFDF 
    31 cat7    Midhigh 9.2105263 #DFDFDF 
    32 cat8    Midhigh 7.8125000 #DFDFDF 
    33 cat1   Mostly Agree 32.9787234 #92C5DE 
    34 cat2   Mostly Agree 49.0909091 #92C5DE 
    35 cat3   Mostly Agree 44.6685879 #92C5DE 
    36 cat4   Mostly Agree 45.4545454 #92C5DE 
    37 cat5   Mostly Agree 42.5000000 #92C5DE 
    38 cat6   Mostly Agree 44.8087432 #92C5DE 
    39 cat7   Mostly Agree 43.8596491 #92C5DE 
    40 cat8   Mostly Agree 30.2083333 #92C5DE 
    41 cat1  Strongly Agree 14.0425532 #0571B0 
    42 cat2  Strongly Agree 30.5454545 #0571B0 
    43 cat3  Strongly Agree 37.4639770 #0571B0 
    44 cat4  Strongly Agree 25.4545455 #0571B0 
    45 cat5  Strongly Agree 7.5000000 #0571B0 
    46 cat6  Strongly Agree 34.0619308 #0571B0 
    47 cat7  Strongly Agree 35.3070175 #0571B0 
    48 cat8  Strongly Agree 52.0833333 #0571B0 

가에 (그들이 데이터 프레임에있어 순서대로 플로팅되지 않는 이유 사람이 알고있는 경우 플롯의 왼쪽면), 이것이 내가 읽었 기 때문에 나의 첫 번째 질문이 될 것입니다. 나는 데이터 프레임의 순서를 변경했는데 아무런 효과가 없었기 때문에 무언가가이를 무시한다고 추측하고 있지만 무엇이 있는지 모르겠습니다.

my.lows$color <- factor(my.lows$color, levels = my.colors, ordered = TRUE) 
    my.highs$color <- factor(my.highs$color, levels = rev(my.colors), ordered = TRUE) 

그런 다음 줄거리는 다음과 같습니다 :

답변

2

당신은 (ggplot 전)이 두 줄을 추가하여 채우기 변수 (color)의 순서를 수정해야

enter image description here

+0

을 그 일했다, 고마워! 그래서 지금 나는 그것이 순서대로 된 이유를 실제로 이해합니다. 요소 "색"은 알파벳 수준의 기본값을가집니다. 어떤 이유로 나는 막대가 "변수"요소의 순서로 스택 될 것이라고 생각했지만 그 요소가 geom_bar에 전달되지 않았기 때문에 의미가 없습니다. 막대의 순서는 항상 fill 매개 변수에 전달 된 인수에 의해 결정됩니까? –

+1

당신은 오신 것을 환영합니다. 스택 순서는 ['position_stack()'] (http://ggplot2.tidyverse.org/reference/position_stack.html)에 설명 된대로 결정됩니다. –