2015-01-30 7 views
5

Viene gestito un sondaggio con 5 domande. Le domande condividono lo stesso insieme di possibili risposte. Ecco i dati, rimodellati per il tracciamento con ggplot2.Riordinare il barattolo impilato x in base ai valori di riempimento con 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) 

Desidero ordinare l'ordine delle domande in base al numero di una risposta data. Così, invece di questo ...

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

... Voglio l'ordine delle domande lungo l'asse x per essere basato sul conteggio di risposta = D, per esempio.

+2

Suggerirei 1) precomputing la quantità in anticipo; 2) riordino tramite l'impostazione 'scale_x_manual'. – tonytonov

risposta

6

Capito. Ordinato dal numero di risposte = A, nell'esempio seguente.

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

puoi anche fare 'ggplot (dati, aes (x = fattore (domanda, livelli = as.character (conteggio (dati, domanda, valore)%>% disgiungi%>% filtro (valore ==" D ")%> % organizza (n)%>%. $ domanda), ordinato = TRUE) , fill = valore)) 'ma di solito è meglio farlo fuori da ggplot come hai fatto qui. – hrbrmstr

Problemi correlati