2010-09-03 12 views
10

Estoy tratando de dar salida a 6 figuras en una imagen, en un diseño de 3x2. Me gustaría colocar espacio extra entre la fila superior y las dos filas inferiores. ¿Es esto posible usando R? Revisé la documentación para ver el par y la trama, y ​​parece que no puedo encontrar una opción adecuada.Añadir espacio extra entre un subconjunto de gráficos

Aquí hay un código de ejemplo:

a = rnorm(100,100,10) 
b = rnorm(100,100,10) 

par(mfrow=c(3,2), oma=c(1,1,1,1), mar=c(2,2,2,2)) 
hist(a) 
hist(b) 
plot(a,b) 
plot(a,b) 
plot(a,b) 
plot(a,b) 

Esto es lo que las salidas de código:


alt text


Esto es lo que me gustaría que a la salida (Modifiqué esta imagen e en un editor externo). Tenga en cuenta el espacio extra entre la fila superior y las filas inferiores.


alt text


Respuesta

9

La función layout() es tu amigo. Podría, por ejemplo, definir una matriz de trazado

1 2 
3 4 
5 6 
7 8 

y luego colocar las parcelas vacías para la tercera y la cuarta. O simplemente cumpla con seis y llame al par para agregar espacio adicional en la parte inferior.

+1

Gracias - layout() es nuevo para mí. Algo así parece hacer lo que quiero: a = diseño (matriz (c (1,2,0,0,3,4,5,6), 4,2, byrow = TRUE), anchos = c (1, 1), alturas = c (4,1,4,4)) – chrisamiller

+2

Sí, el diseño es maravilloso y bastante útil. Los niños en estos días hablan de nada más que de ggplot2, por lo que tiende a olvidarse :) Buena captura de 0 cero para omitir parcelas, y lo tienes exactamente con ancho y alto. –

8

puedo pensar en tres maneras:

1) utiliza el parámetro gráfico mar para establecer el margen parcela

Puede recuperar los márgenes actuales con

currmar <- par()$mar 

Puede establecer nuevos márgenes con

par("mar"=c(5, 4, 4, 2)) 

con el de los números siendo inferior, izquierda, arriba y márgenes derecho (véase ?par)

Puede realizar varias llamadas a par para cada parcela, por lo que puede cambie el margen inferior solo para las parcelas superiores.

2) Utilizar disposición para generar una rejilla irregular trazado (ver ?layout para ejemplos)

3) Guarde la trama en .svg o .pdf y luego usar Inkscape (o cualquier software que desea) para mover las parcelas .

4

Creo que ir con mar es la forma en que lo haría. Sin embargo, como parece, quieres que todas las tramas sean iguales. Por lo tanto, debe sacarse la misma cantidad por mar en cada parcela en la parte superior e inferior.
En su caso se podría utilizar los siguientes números:
1. fila: par(mar=c(7,4,4,2))
2. consecutivas: par(mar=c(5,4,6,2))
3.fila: par(mar=c(7,4,4,2))

De esta forma, todas las parcelas ocupan la misma altura. Modifique el primer y el tercer número de tal manera que sean los mismos para cada trama para lograr esto. Sin embargo, en advertencia: hay un poco de espacio en blanco debajo de las parcelas en la fila inferior.

+0

Agradable. Ya codifiqué mi solución usando layout(), pero esto también habría funcionado. Gracias. – chrisamiller

Cuestiones relacionadas