2013-05-17 24 views
12

In R, ho un data.frame come quello nella parte superiore dell'immagine.Crea barplot da data.frame

Esiste la possibilità di creare un barattolo come quello nella parte inferiore dell'immagine?

enter image description here

+0

Se si intende un output ASCII, provare il pacchetto 'txtplot'. –

+0

Siamo spiacenti, questo era solo un esempio;) Voglio avere una trama come quella che ottengo con la funzione barplot – ElPatzo

+0

Probabilmente vuoi cambiare il titolo della tua domanda? In realtà vuoi creare un barplot da un data.frame e non viceversa. – Beasterfield

risposta

19

Utilizzando la grafica di base si può fare questo semplicemente:

mydf <- data.frame(X1=c(A=2, B=4, C=1), X2=c(3,2,NA), X3=c(4,1,NA)) 
barplot(t(as.matrix(mydf)), beside=TRUE) 

Utilizzando le chiamate aggiuntive a axis possono dare l'etichettatura più come nella questione.

+2

questa dovrebbe essere la risposta accettata: perché utilizzare due librerie per svolgere un compito così semplice? –

+0

perché la conversione in una matrice e quindi una tabella potrebbe aggiungere un sacco di spese generali se si dispone di un file df di grandi dimensioni? – wordsforthewise

+0

@wordforthewise, se il df è così grande che questo overhead è addirittura notabile (per non parlare di un problema) allora un barplot non è probabilmente la migliore visualizzazione di esso comunque. –

14

Supponendo, che non si vuole in uscita ASCII, ecco una soluzione utilizzando ggplot2:

# load/generate your data 
mydf <- data.frame(X1 = c(2,4,1), X2 = c(3,2,NA), x3 = c(4,1,NA), row.names=c("A","B","C")) 
mydf$Category <- row.names(mydf) 

# bring your data to long format as needed by ggplot 
library(reshape2) 
mydf.molten <- melt(mydf, value.name="Count", variable.name="Variable", na.rm=TRUE) 

# plot and facet by categories 
library(ggplot2) 
qplot(data=mydf.molten, x = Variable, y = Count, geom="bar", stat = "identity") + facet_wrap("Category") 

enter image description here

Per ulteriori dettagli, vi consiglio di consultare il ggplot2 manual, in particolare il capitolo su geom_bar e facet_wrap.

+0

Ha funzionato per me! Grazie! – ElPatzo

+0

ha ottenuto questo errore con il tuo codice: '> mydf.molten <- melt (mydf, value.name =" Conteggio ", variable.name =" Variabile ", na.rm = TRUE) Utilizzo della categoria come variabili di identificazione > qplot (data = mydf.molten, x = Variabile, y = Conteggio, geom = "bar", stat = "identità") + facet_wrap ("Categoria") Errore: stat_count() non deve essere utilizzato con estetici. Inoltre: Messaggio di avviso: 'stat' è deprecato' –

+0

@Mona Jalal; 'ggplot2' è cambiato dal 2013, specialmente quando è stato aggiornato da ver. Da 1.xxx a 2.xxx. – cuttlefish44