Usando el siguiente código, intenté dibujar cuatro parcelas en un gráfico R
. No estoy contento con la figura porque hay mucho espacio entre las parcelas, por lo tanto, el ancho de las parcelas no es suficiente para analizarlas.
¿Podría alguien ayudarme a producir un buen gráfico que tenga cuatro parcelas?
¿Cómo puedo mantener las etiquetas del eje x del 1 al 10 en lugar de las 5 etiquetas predeterminadas?
Datos:
a1: 11.013 13.814 13.831 13.714 13.787 13.734 13.778 13.771 13.823 13.659
a2: 5.181 7.747 8.314 8.061 7.920 8.153 8.540 8.845 7.881 8.301
He usado datos de a1 para b1, c1 y d1; datos de a2 para b2, c2 y d2 solo por aquí.
Figura:
Código:
op=par(mfrow=c(4,1), mar=c(5.5,5.1,4.1,2.1))
plot(a1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="A")
lines(a2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
par(xpd=T)
legend(1,26.5,c("X","Y"),bty="n",horiz=T,cex=1.5,col=c("red1","darkblue"),text.col=c("red1","darkblue"),pch=c(1,3),lty=c(2,3),x.intersp=0.4,adj=0.2)
plot(b1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="B")
lines(b2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(c1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="C")
lines(c2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(d1/1000, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="D")
lines(d2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
> mtext("Price", side=2, at=100,line=3,cex=1.1)
r
data-visualization
samarasa
fuente
fuente
Respuestas:
Si desea seguir con algo como el método que ha estado utilizando, puede aprender el comando layout (). Algunos otros cambios detallados y puede obtener los gráficos mucho más juntos. También podría poner las cosas únicas que cambian entre los gráficos en una lista (como los datos y los márgenes) y luego pasar por un bucle. Además, notará que hice el eje inferior con el comando axis () directo para que pueda controlar dónde van los elementos.
Debo señalar que realmente no me esforcé por hacer esto lo más agradable posible y en lugar de hacer ese primer gráfico ficticio, podría haber establecido suficiente espacio en el primer fotograma. Desafortunadamente, la configuración mar () intenta llenar el marco y el margen superior influye en la distancia a la que está lejos la etiqueta sobre el gráfico, por lo que tendría que ir y hacer todas mis etiquetas con mtext () o text () en lugar de simplemente usar la configuración principal dentro de la trama y no tenía ganas de hacerlo
fuente
Recomendaría aprender el paquete de gráficos de celosía. Puedo acercarme a lo que quieres con unas pocas líneas. Primero, empaquete sus datos en un marco de datos, algo como esto:
cuyos rendimientos:
Luego, usa la red
xyplot
:que produce un buen gráfico como:
EDITAR:
Si desea tener diferentes símbolos y líneas y que aparezcan en su leyenda, se complica, porque literalmente construye la leyenda usted mismo y tiene que saber cómo obtener los colores de red predeterminados si no los anuló usted mismo :
EDITAR 2:
Puede simplificar el código y el gráfico, si las dos categorías realmente son tan simples como "X" e "Y":
que usará "X" e "Y" como símbolos de puntos. No necesita una leyenda en absoluto, y luego puede dedicar aún más espacio a los gráficos en sí. (Por otro lado, es posible que no le guste el aspecto, o que le resulte más difícil determinar el centro exacto del punto, aunque eso no es un problema tan importante como podría ser, ya que la línea pasa por cada punto).
EDITAR 3:
En realidad, debe agregar
strip=F, strip.left=T,
al gráfico, para colocar las etiquetas A, B, C, D, a la izquierda de los gráficos, lo que le da más espacio en un gráfico largo como este:fuente
grid
algo: celosía y ggplot2 construidos en la cuadrícula) .Aquí hay una versión de la
ggplot2
solución de @ Brandon que incorpora el comportamiento de leyenda deseado:Encuentro que las leyendas son mucho más fáciles
ggplot2
, pero YMMV.EDITAR
Abordando algunas preguntas en los comentarios. Para especificar determinados tipos de puntos o de líneas, utilizaría
scale_aesthetic_manual
dondeaesthetic
es o bienshape
,linetype
, etc. Por ejemplo:El cambio del tamaño de varias etiquetas de eje se realiza cambiando la configuración en el tema, generalmente usando
opts()
. Por ejemplo:Realmente deberías sumergirte en el sitio web y su libro para obtener más información.
fuente
Similar a la respuesta de Wayne, también usaría un paquete diferente, a saber
ggplot2
Lo que nos da un cuadro como:
fuente
+ opts(panel.background=theme_blank())
theme_get()
para ver qué puede cambiar. Luego siga el mismo patrón que mi último comentario, configurándolos=theme_blank()
melt()