The order of stacked rods in ggplot

I am trying to calculate divergent histograms made in ggplot. I followed the example presented here . Everything works, except for the order of stacked rods on the left side of the graph.

divergent bar chart

From what I read, by default it should be that the bars are stacked in the order in which they are in my data frame, but this is not so. I made sure that in my data system there is an order of "I completely disagree", "I basically disagree", "midlows"; but they are built in the order of "mostly disagree", "midlows", "Strongly Disagree". It's not even an alphabetical order, so I'm not sure why he does it.

Here is my code:

  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))

Here is my data frame:

        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

- , , ( ), , . , , , - , , .

+1
1

(color), ( ggplot):

  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)

:

enter image description here

+2

Source: https://habr.com/ru/post/1676375/


All Articles