2015-01-30 16 views
5

Ankieta z 5 pytań jest podawana. Pytania mają ten sam zestaw możliwych odpowiedzi. Oto dane, przekształcone do wykreślania za pomocą ggplot2.Uporządkuj kolejność wykresu słupkowego x na podstawie wartości wypełnienia za pomocą ggplot2

library(tidyr) 
library(magrittr) 

data <- data.frame(ID = c(1:500), 
        q1 = factor(sample(c(1:4), 500, replace = T), 
           labels = c("A", "B", "C", "D")), 
        q2 = factor(sample(c(1:4), 500, replace = T), 
           labels = c("A", "B", "C", "D")), 
        q3 = factor(sample(c(1:4), 500, replace = T), 
           labels = c("A", "B", "C", "D")), 
        q4 = factor(sample(c(1:4), 500, replace = T), 
           labels = c("A", "B", "C", "D")), 
        q5 = factor(sample(c(1:4), 500, replace = T), 
           labels = c("A", "B", "C", "D"))) %>% 
gather(question, value, q1:q5) 

Chcę uporządkować kolejność pytań na podstawie numeru danej odpowiedzi. Więc zamiast tego ...

library(ggplot2) 

ggplot(data, aes(x = question , fill = value)) + 
    geom_bar() + 

    theme(panel.background = element_rect(fill = "white")) + 
    scale_fill_manual("Value", values = c("#2171B5", "#6BAED6", "#BDD7E7", 
            "#EFF3FF")) 

enter image description here

... Chcę kolejność pytań wzdłuż osi X jest oparty na liczbie odpowiedzi = D, na przykład.

+2

Polecam 1) precomputing ilość z góry; 2) zmiana kolejności poprzez ustawienie 'scale_x_manual'. – tonytonov

Odpowiedz

6

Rozumiem. Sortowane według liczby odpowiedzi = A, w poniższym przykładzie.

data$question <- reorder(dataf$question, data$value, function(x) max(table(x)[1])) 

    ggplot(heatDf, aes(x = question, fill = value)) + 
     geom_bar() + 
     theme(panel.background = element_rect(fill = "white")) + 
     scale_fill_manual("", values = c("#2171B5", "#6BAED6", "#BDD7E7", 
             "#EFF3FF", "grey30")) 

enter image description here

+1

możesz również zrobić "ggplot (dane, aes (x = czynnik (pytanie, poziomy = jak.charakter (liczba (dane, pytanie, wartość)%>% ungroup%>% filtr (wartość ==" D ")%> % zorganizuj (n)%>%. $ pytanie), uporządkowano = PRAWDA) , wypełnienie = wartość)) 'ale zwykle lepiej jest zrobić to poza ggplotem, tak jak tutaj. – hrbrmstr

Powiązane problemy