varias tutorial qplot graficas ggplot change r ggplot2 gridextra

tutorial - qplot



Organiza ggplots juntos en proporciones y espacios personalizados (2)

grid.arrange () no le permitirá alinear los paneles correctamente, es mejor trabajar con gtable.

require(gtable) g1 <- ggplotGrob(plot1) g2 <- ggplotGrob(plot2) ## add dummy column for missing strips g2 <- gtable_add_cols(g2, unit(0,"mm")) ## merge, basing widths on g1 g <- gtable:::rbind_gtable(g1, g2, "first") ## add spacing g <- gtable_add_rows(g, unit(1,"cm"), pos=nrow(g1)) grid.newpage() grid.draw(g)

Tenga en cuenta que las alturas de los paneles son iguales por defecto con esta estrategia. Eso es porque aparecen como unit(1, "null") en el diseño ( g$heights ). Es trivial editar g$heights si se requiere otra relación.

Intento combinar n barras de barras con un diagrama de etiqueta común en la parte inferior. Mi problema es que grid.arrange combina las dos parcelas en 50% -50%. Estoy buscando algo así como la matriz de diseño donde puede especificar 4 espacios y los primeros 3 que se tomarán en la primera gráfica y la última ranura en la segunda gráfica. Y personalice de manera similar según el número de parcelas.

Aquí tengo un código de muestra de lo que intento:

#load libraries require(ggplot2) require(reshape) require(grid) require(gridExtra) #data creation #DATA temp<-data.frame(var1=sample(0:100,100,replace=T)) temp$var2<-100-temp$var1 temp$type<-factor(c(rep("S1",50),rep("S2",50))) temp$label<-factor(rep(1:50,2)) temp1<-melt(temp,id.var=c("type","label")) #LABELS labs1<-data.frame(pos=c(1,8,22,45,50)) labs2<-data.frame(pos1=round((diff(labs1$pos)/2)+labs1$pos[1:length(labs1$pos)-1],1), lab=c("A","B","D","E")) #plots plot1<-ggplot(data=temp1)+ geom_bar(aes(x=label,y=value,fill=variable),stat="identity",space=0,width=1)+ facet_grid(type~.)+theme_bw()+labs(x=NULL,y=NULL)+ scale_y_continuous(expand=c(0,0))+ theme(legend.position="none",axis.text=element_blank(),axis.ticks=element_blank()) plot2<-ggplot()+ geom_line(data=labs1,aes(x=pos,y=-0.05),size=0.6)+ geom_point(data=labs1,aes(x=pos,y=-0.05))+labs(x=NULL,y=NULL)+ geom_text(data=labs2,aes(x=pos1,y=-0.1,label=lab))+ theme_bw()+scale_x_continuous(expand=c(0,0))+scale_y_continuous(limit=c(-0.5,0))+ theme(legend.position="none",axis.text=element_blank(),axis.ticks=element_blank()) plot3<-grid.arrange(plot1, plot2) #here perhaps there is a way to say plot1 to take up 1/3 of the plot area.

Las dos tramas no se alinean perfectamente. Pero ese es otro problema. Y esto fue útil. ¿Cómo puedo organizar un número arbitrario de ggplots usando grid.arrange? Podría trazar cada una por una, pero me gustaría tener las etiquetas de facetas.


grid.arrange(plot1, plot2, widths=c(0.7, 0.3), ncol=2)

lo siento por tu ejemplo:

grid.arrange(plot1, plot2, heights=c(0.7, 0.3), nrow=2)

EDITAR - para el espaciado entre parcelas:

blank<-rectGrob(gp=gpar(col="white")) # make a white spacer grob grid.arrange(plot1, blank, plot2, heights=c(0.7, 0.05, 0.25), nrow=3)