varias superponer studio los guia graficos graficas ggplot escala ejes como cambiar avanzados r ggplot2 histogram

studio - superponer graficas en r ggplot



Diferentes cortes por faceta en el histograma de ggplot2. (4)

Un latticista desafiado por ggplot2 necesita ayuda: ¿Cuál es la sintaxis para solicitar roturas variables por faceta en un histograma?

library(ggplot2) d = data.frame(x=c(rnorm(100,10,0.1),rnorm(100,20,0.1)),par=rep(letters[1:2],each=100)) # Note: breaks have different length by par breaks = list(a=seq(9,11,by=0.1),b=seq(19,21,by=0.2)) ggplot(d, aes(x=x) ) + geom_histogram() + ### Here the ~breaks should be added facet_wrap(~ par, scales="free")

Como señaló jucor , here algunas soluciones más.

A pedido especial, y para mostrar por qué no soy un gran fan de ggplot, la versión de lattice

library(lattice) d = data.frame(x=c(rnorm(100,10,0.1),rnorm(100,20,0.1)),par=rep(letters[1:2],each=100)) # Note: breaks have different length by par myBreaks = list(a=seq(8,12,by=0.1),b=seq(18,22,by=0.2)) histogram(~x|par,data=d, panel = function(x,breaks,...){ # I don''t know of a generic way to get the # grouping variable with histogram, so # this is not very generic par = levels(d$par)[which.packet()] breaks = myBreaks[[par]] panel.histogram(x,breaks=breaks,...) }, breaks=NULL, # important to force per-panel compute scales=list(x=list(relation="free")))


Aquí hay una alternativa:

hls <- mapply(function(x, b) geom_histogram(data = x, breaks = b), dlply(d, .(par)), myBreaks) ggplot(d, aes(x=x)) + hls + facet_wrap(~par, scales = "free_x")

Si necesita reducir el rango de x, entonces

hls <- mapply(function(x, b) { rng <- range(x$x) bb <- c(rng[1], b[rng[1] <= b & b <= rng[2]], rng[2]) geom_histogram(data = x, breaks = bb, colour = "white") }, dlply(d, .(par)), myBreaks) ggplot(d, aes(x=x)) + hls + facet_wrap(~par, scales = "free_x")


Estrictamente hablando, no es posible dar diferentes rupturas en las diferentes facetas. Pero puede obtener el mismo efecto al tener una capa diferente para cada faceta (como en la respuesta del usuario20650 ), pero en su mayoría automatizando las múltiples llamadas del geom_histogram :

d <- data.frame(x=c(rnorm(100,10,0.1),rnorm(100,20,0.1)), par=rep(letters[1:2],each=100)) breaks <- list(a=seq(9,11,by=0.1),b=seq(19,21,by=0.2)) ggplot(d, aes(x=x)) + mapply(function(d, b) {geom_histogram(data=d, breaks=b)}, split(d, d$par), breaks) + facet_wrap(~ par, scales="free_x")

La llamada mapply crea una lista de geom_histogram s que se pueden agregar a la trama. La parte difícil es que tiene que dividir manualmente los datos ( split(d, d$par) ) en los datos que entran en cada faceta.


No creo que sea posible dar diferentes puntos de quiebre en cada faceta.

Como solución alternativa, puede hacer dos gráficos y luego, con la función grid.arrange() de la biblioteca gridExtra , gridExtra . Para establecer puntos de ruptura en geom_histogram() use binwidth= y establezca un valor para el ancho de bin.

p1<-ggplot(subset(d,par=="a"), aes(x=x) ) + geom_histogram(binwidth=0.1) + facet_wrap(~ par) p2<-ggplot(subset(d,par=="b"), aes(x=x) ) + geom_histogram(binwidth=0.2) + facet_wrap(~ par) library(gridExtra) grid.arrange(p1,p2,ncol=2)


Siguiendo el ejemplo de Didzis:

ggplot(dat=d, aes(x=x, y=..ncount..)) + geom_histogram(data = d[d$par == "a",], binwidth=0.1) + geom_histogram(data = d[d$par == "b",], binwidth=0.01) + facet_grid(.~ par, scales="free")

EDIT: esto funciona para más niveles pero, por supuesto, ya hay mejores soluciones

# More facets d <- data.frame(x=c(rnorm(200,10,0.1),rnorm(200,20,0.1)),par=rep(letters[1:4],each=100)) # vector of binwidths same length as number of facets - need a nicer way to calculate these my.width=c(0.5,0.25,0.1,0.01) out<-lapply(1:length(my.width),function(.i) data.frame(par=levels(d$par)[.i],ggplot2:::bin(d$x[d$par==levels(d$par)[.i]],binwidth=my.width[.i]))) my.df<-do.call(rbind , out) ggplot(my.df) + geom_histogram(aes(x, y = density, width = width), stat = "identity") + facet_wrap(~par,scales="free")

desde https://groups.google.com/forum/?fromgroups=#!searchin/ggplot2/bin $ 20histogram $ 20by $ 20facet / ggplot2 / xlqRIFPP-zE / CgfigIkgAAkJ