scale_x_discrete manipulation ggtitle ggplot change r ggplot2

manipulation - Alineación de arriba a abajo de dos figuras ggplot2



ggtitle size (3)

Aquí hay un ejemplo:

m <- matrix(c(3, 1, 0, 2), 2, byrow = T) lay <- gglayout(m, widths = c(1, 3), heights = c(3, 1)) ggtable(p1, p2, p3, layout = lay)

puedes usar esto por

install.packages(''devtools'') library(devtools) dev_mode() install_github("ggplot2", "kohske", "cutting-edge") library(ggplot2)

tenga en cuenta que esta rama es experimental, por lo que tal vez haya errores.

Me doy cuenta de que la función ggExtra paquete ggExtra ha sido desaprobada y eliminada. Sin embargo, estoy usando mi propia versión ya que parece proporcionar la funcionalidad específica que necesito. He examinado facetas para resolver mi problema, pero no creo que funcione para mi problema en particular. Lo que parece ser el problema es que las imágenes de arriba a abajo no se alinean cuando uso coord_equal en una de ellas. Sin embargo, esto no parece afectar de izquierda a derecha. Aquí hay una versión simplificada (o al menos tan simple como puedo) de lo que intento lograr.

Crea algunos cuadros de datos ficticios:

source(''https://raw.github.com/jbryer/multilevelPSA/master/r/align.R'') require(psych) df = data.frame(x=rnorm(100, mean=50, sd=10), y=rnorm(100, mean=48, sd=10), group=rep(letters[1:10], 10)) dfx = describe.by(df$x, df$group, mat=TRUE)[,c(''group1'', ''mean'', ''n'', ''min'', ''max'')] names(dfx) = c(''group'', ''x'', ''x.n'', ''x.min'', ''x.max'') dfy = describe.by(df$y, df$group, mat=TRUE)[,c(''group1'', ''mean'', ''n'', ''min'', ''max'')] names(dfy) = c(''group'', ''y'', ''y.n'', ''y.min'', ''y.max'') df2 = cbind(dfx, dfy[,2:ncol(dfy)]) range = c(0,100)

Esto configurará las tres parcelas:

p1a = ggplot(df2, aes(x=x, y=y, colour=group)) + geom_point() + opts(legend.position=''none'') + scale_x_continuous(limits=range) + scale_y_continuous(limits=range) p1 = p1a + coord_equal(ratio=1) p2 = ggplot(df, aes(x=x, y=group, colour=group)) + geom_point() + scale_x_continuous(limits=range) + opts(legend.position=''none'') p3 = ggplot(df, aes(x=group, y=y, colour=group)) + geom_point() + scale_y_continuous(limits=range) + opts(legend.position=''none'')

La alineación de arriba a abajo no funciona con coord_equal

grid_layout <- grid.layout(nrow=2, ncol=2, widths=c(1,2), heights=c(2,1)) grid.newpage() pushViewport( viewport( layout=grid_layout, width=1, height=1 ) ) align.plots(grid_layout, list(p1, 1, 2), list(p3, 1, 1), list(p2, 2, 2))

Broken Plot http://bryer.org/alignplots1.png

La solución es agregar respect=TRUE a la llamada grid.layout :

grid_layout <- grid.layout(nrow=2, ncol=2, widths=c(1,2), heights=c(2,1), respect=TRUE)

Pero si no uso coord_equal la alineación funciona bien:

grid_layout <- grid.layout(nrow=2, ncol=2, widths=c(1,2), heights=c(2,1)) grid.newpage() pushViewport( viewport( layout=grid_layout, width=1, height=1 ) ) align.plots(grid_layout, list(p1a, 1, 2), list(p3, 1, 1), list(p2, 2, 2))

Trama de trabajo http://bryer.org/alignplots2.png


Para resolver el problema utilizando el método align.plots, especifique respect=TRUE en la llamada de diseño:

grid_layout <- grid.layout(nrow=2, ncol=2, widths=c(1,2), heights=c(2,1), respect=TRUE)


ggplot2 ahora tiene ggplotGrob() , que puede ayudar con esto.

Primero, necesitamos actualizar el código usado para generar las parcelas:

p1a = ggplot(df2, aes(x=x, y=y, colour=group)) + geom_point() + scale_x_continuous(limits=range) + scale_y_continuous(limits=range) p1 = p1a + coord_equal(ratio=1) + theme_minimal() + theme(legend.position=''none'') p2 = ggplot(df, aes(x=x, y=group, colour=group)) + geom_point() + scale_x_continuous(limits=range) + theme_minimal() + theme(legend.position=''none'') p3 = ggplot(df, aes(x=group, y=y, colour=group)) + geom_point() + scale_y_continuous(limits=range) + theme_minimal() + theme(legend.position=''none'') p4 <- ggplot(df, aes(x = group, y = y)) + geom_blank() + theme(line = element_blank(), rect = element_blank(), text = element_blank(), title = element_blank())

p4 estará en blanco; solo necesitamos que grob dibuje.

Luego cargamos el paquete de grillas y dibujamos los grobs en una lista ordenada en filas y columnas usando cbind() y rbind() .

library(grid) grid.newpage() grid.draw( cbind( rbind(ggplotGrob(p3), ggplotGrob(p4), size = "first"), rbind(ggplotGrob(p1), ggplotGrob(p2), size = "first"), size = "first"))

No estoy seguro de si este método le permitirá trazar p3 en un ancho diferente y p2 en una altura diferente, como los tiene en el ejemplo original; Normalmente necesito una grilla de gráficos del mismo tamaño, y no he tenido que averiguar diferentes tamaños.

Esta respuesta se basa en parte parcialmente en https://.com/a/17463184/393354