visualizzare un diagramma a riquadri orizzontale in R


8

Ho un set di dati come questo. I dati sono stati raccolti attraverso un questionario e ho intenzione di fare alcune analisi esplorative dei dati.

windows <- c("yes", "no","yes","yes","no")
sql     <- c("no","yes","no","no","no")
excel  <- c("yes","yes","yes","no","yes")
salary <- c(100,200,300,400,500 )

test<- as.data.frame (cbind(windows,sql,excel,salary),stringsAsFactors=TRUE)
test[,"salary"] <- as.numeric(as.character(test[,"salary"] ))

Ho una variabile di risultato (stipendio) nel mio set di dati e un paio di variabili di input (strumenti). Come posso visualizzare un diagramma a riquadri orizzontale come questo: inserisci qui la descrizione dell'immagine

Risposte:


3

Iniziamo creando un set di dati falso.

software = sample(c("Windows","Linux","Mac"), n=100, replace=T) 
salary = runif(n=100,min=1,max=100) 
test = data.frame(software, salary)

Questo dovrebbe creare un frame di dati testche assomiglierà in qualche modo a:

    software    salary
1    Windows 96.697217
2      Linux 29.770905
3    Windows 94.249612
4        Mac 71.188701
5      Linux 94.028326
6      Linux  7.482632
7        Mac 98.841689
8        Mac 81.152623
9    Windows 54.073761
10   Windows  1.707829

MODIFICA in base al commento Si noti che se i dati non esistono già nel formato sopra, possono essere modificati in questo formato. Prendiamo un frame di dati fornito nella domanda originale e supponiamo che venga chiamato il frame di dati raw_test.

    windows sql excel salary
1     yes  no   yes    100
2      no  yes  yes    200
3     yes  no   yes    300
4     yes  no    no    400
5      no  no   yes    500

Ora, usando la meltfunzione / metodo dal reshapepacchetto in R, per prima cosa creare il dataframe test(che sarà usato per la stampa finale) come segue:

# use melt to convert from wide to long format 
test = melt(raw_test,id.vars=c("salary"))
# subset to only select where value is "yes"
test = subset(test, value == 'yes')
# replace column name from "variable" to "software" 
names(test)[2] = "software"   

Ora otterrai un frame di dati testche assomiglia a:

  salary software value
1     100  windows   yes
3     300  windows   yes
4     400  windows   yes
7     200      sql   yes
11    100    excel   yes
12    200    excel   yes
13    300    excel   yes
15    500    excel   yes

Dopo aver creato il set di dati. Genereremo ora la trama.

Innanzitutto, crea il grafico a barre sulla sinistra in base ai conteggi del software che rappresenta il tasso di utilizzo.

p1 <- ggplot(test, aes(factor(software))) + geom_bar() + coord_flip()

Quindi, crea il boxplot sulla destra.

p2 <- ggplot(test, aes(factor(software), salary)) + geom_boxplot() + coord_flip()

Infine, posiziona entrambi questi grafici uno accanto all'altro.

require('gridExtra')
grid.arrange(p1,p2,nrow=1)

Questo dovrebbe creare una trama come:

Nel riquadro di sinistra mostra i conteggi di come viene utilizzato il software diverso rappresentato tramite grafici a barre e nel riquadro di destra mostra la distribuzione degli stipendi raggruppati per il software utilizzato rappresentato tramite grafici a scatole.


2

Dovrai creare una colonna che contenga informazioni sul software, ad esempio denominalo software e la colonna dello stipendio ha lo stipendio corrispondente, quindi qualcosa di simile

 Software   Salary
 Microsoft  100
 Microsoft  300
 Microsoft  400
 SQL        200

e così via ... quindi puoi tracciare con il codice qui sotto

p <- ggplot(test, aes(factor(software), salary))
p + geom_boxplot() + coord_flip()

Buono ma come posso creare una colonna software?
Hamideh,

Questo è qualcosa che dovrai cercare tu stesso. Non sono sicuro dell'aspetto del tuo set di dati: la funzione di fusione potrebbe essere utile per te.
Lauren Goodwin,

@LaurenGoodwin La mia risposta a questa domanda usa gridExtra per tracciare un diagramma a barre e un diagramma a scatole fianco a fianco per produrre la visualizzazione richiesta.
Nitesh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.