나는 ggplot에서 만들어진 누적 막대 차트를 파악하려고합니다. 나는 here 게시 된 예제를 따랐다. 작도의 왼쪽에 누적 막대의 순서를 제외한 모든 것이 작동합니다. 내가 읽은 바로는ggplot의 누적 막대 순서
은, 기본값은 바 그들이 내 데이터 프레임에 순서대로 적층되어 있어야하지만 그들은 아니에요. 나는 나의 데이터 프레임이 "매우 동의하지 않음", "대부분 동의하지 않음", "중간 쯤"이라는 명령을 가지고 있는지 확인했다. 그러나 그들은 "대부분 동의하지 않음", "중간 쯤", "강력하게 반대"라는 순서로 꾸몄다. 그것은 알파벳 순서조차도 아니기 때문에 왜 그렇게하는지 확신 할 수 없습니다.
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)
그런 다음 줄거리는 다음과 같습니다 :
을 그 일했다, 고마워! 그래서 지금 나는 그것이 순서대로 된 이유를 실제로 이해합니다. 요소 "색"은 알파벳 수준의 기본값을가집니다. 어떤 이유로 나는 막대가 "변수"요소의 순서로 스택 될 것이라고 생각했지만 그 요소가 geom_bar에 전달되지 않았기 때문에 의미가 없습니다. 막대의 순서는 항상 fill 매개 변수에 전달 된 인수에 의해 결정됩니까? –
당신은 오신 것을 환영합니다. 스택 순서는 ['position_stack()'] (http://ggplot2.tidyverse.org/reference/position_stack.html)에 설명 된대로 결정됩니다. –