2012-01-17 15 views
11

estoy tratando de trazar al lado del otro los siguientes conjuntos de datosmúltiples histogramas con ggplot2 - Posición

dataset1=data.frame(obs=runif(20,min=1,max=10)) 
dataset2=data.frame(obs=runif(20,min=1,max=20)) 
dataset3=data.frame(obs=runif(20,min=5,max=10)) 
dataset4=data.frame(obs=runif(20,min=8,max=10)) 

He intentado añadir la posición de la opción = "esquivar" para geom_histogram sin suerte. ¿Cómo puedo cambiar el siguiente código para trazar las columnas de histogramas una al lado de la otra sin superposición?

ggplot(data = dataset1,aes_string(x = "obs",fill="dataset")) + 
geom_histogram(binwidth = 1,colour="black", fill="blue")+ 
geom_histogram(data=dataset2, aes_string(x="obs"),binwidth = 1,colour="black",fill="green")+ 
geom_histogram(data=dataset3, aes_string(x="obs"),binwidth = 1,colour="black",fill="red")+ 
geom_histogram(data=dataset4, aes_string(x="obs"),binwidth = 1,colour="black",fill="orange") 

Respuesta

22

ggplot2 funciona mejor con los datos "largos", donde todos los datos están en una sola trama de datos y los diferentes grupos se describen por otras variables en la trama de datos. A tal fin

DF <- rbind(data.frame(fill="blue", obs=dataset1$obs), 
      data.frame(fill="green", obs=dataset2$obs), 
      data.frame(fill="red", obs=dataset3$obs), 
      data.frame(fill="orange", obs=dataset3$obs)) 

donde he añadido una columna fill que tiene los valores que utilizó en sus histogramas. Teniendo en cuenta que, la trama se puede hacer con:

ggplot(DF, aes(x=obs, fill=fill)) + 
    geom_histogram(binwidth=1, colour="black", position="dodge") + 
    scale_fill_identity() 

donde position="dodge" ahora funciona.

enter image description here

Usted no tiene que utilizar el color de relleno literal como la distinción. Aquí hay una versión que usa el número de conjunto de datos.

DF <- rbind(data.frame(dataset=1, obs=dataset1$obs), 
      data.frame(dataset=2, obs=dataset2$obs), 
      data.frame(dataset=3, obs=dataset3$obs), 
      data.frame(dataset=4, obs=dataset3$obs)) 
DF$dataset <- as.factor(DF$dataset) 
ggplot(DF, aes(x=obs, fill=dataset)) + 
    geom_histogram(binwidth=1, colour="black", position="dodge") + 
    scale_fill_manual(breaks=1:4, values=c("blue","green","red","orange")) 

Esto es lo mismo a excepción de la leyenda.

enter image description here

Cuestiones relacionadas