2015-04-23 6 views
5

Ho bisogno di tracciare tre valori, per creare tre barre per ogni valore dell'asse X. I miei dati sono: My dataframe DFCome stampare più colonne in R per lo stesso valore X-Axis

Nel asse X deve essere la colonna etichettata come "m" e per ogni valore di "m" devo tracciare il corrispondente "x" ed il valore "y" "z".

voglio usare ggplot2 e ho bisogno di qualcosa di simile:

Goal

+0

Potete fornire qualche dati riproducibili per dimostrare ciò che vuoi realizzare? – cdeterman

+0

Includi un [esempio riproducibile] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) con dati di input di esempio e mostra il codice che hai scritto lontano. – MrFlick

+0

Scusa, non è stato caricato all'inizio, ho avuto qualche problema con le foto –

risposta

6

ho creato il mio set di dati per dimostrare come farlo:

dati:

x <- runif(12,1,1.5) 
y <- runif(12,1,1.5) 
z <- runif(12,1,1.5) 
m <- letters[1:12] 
df <- data.frame(x,y,z,m) 

Soluzione:

#first of all you need to melt your data.frame 
library(reshape2) 
#when you melt essentially you create only one column with the value 
#and one column with the variable i.e. your x,y,z 
df <- melt(df, id.vars='m') 

#ggplot it. x axis will be m, y will be the value and fill will be 
#essentially your x,y,z 
library(ggplot2) 
ggplot(df, aes(x=m, y=value, fill=variable)) + geom_bar(stat='identity') 

uscita:

enter image description here

Se si desidera che le barre uno accanto all'altro è necessario specificare la posizione dodge a geom_bar cioè:

ggplot(df, aes(x=m, y=value, fill=variable)) + 
     geom_bar(stat='identity', position='dodge') 

enter image description here

+0

Grazie davvero molto, la tua soluzione mi ha salvato. Sapete come evitare che i valori dell'asse X vengano visualizzati in ordine alfabetico? –

+0

Siete i benvenuti :) Felice di poter essere di aiuto. C'è una buona risposta [qui] (http://stackoverflow.com/questions/3253641/how-to-change-the-order-of-a-discrete-x-scale-in-ggplot) su come cambiare l'ordine (la seconda risposta, non quella accettata). Devi usare 'scale_x_discrete' con l'argomento' limits'. – LyzandeR