2010-08-20 20 views
6

Estoy tratando de trazar un cuadro dentro de un diagrama de relleno.pero desafortunadamente, cuando trazo las líneas() después de que se crea el gráfico lleno.contour, la figura se desplaza hacia la derecha porque la escala fuerza a la imagen a la izquierda, pero la caja permanece en las mismas coordenadas. Esto es lo que mi código es el siguiente:Trazando una caja dentro de las parcelas fill.contour en R?

dev.new(width=6,height=7) 
mypredict<-matrix(data=mypredict,nrow=20,ncol=25) 
filled.contour(x=seq(from=-1.5,to=1.5,length=20), 
y=seq(from=1,to=3.75,length=25), 
z=mypredict, 
col=hsv(h=seq(from=2/3,to=0,length=20),s=1,v=1) 
) 
top <- 3.42 
bot <- 1.56 
lines(c(-1,-1),c(bot,top)) 
lines(c(1,1),c(bot,top)) 
lines(c(-1,1),c(top,top)) 
lines(c(-1,1),c(bot,bot)) 

¿Alguien sabe cómo puedo trazar esas líneas dentro de la función filled.contour? De lo contrario, las líneas no se trazan correctamente en la imagen principal, ya que la escala/leyenda del gráfico se coloca a la derecha.

Gracias!

Respuesta

6

La página del manual para filled.contour explica el problema (y da una solución)

Esta función utiliza la función de ‘diseño’ y así se limita a una pantalla de página completa. Como alternativa, considere las funciones 'levelplot' y 'contourplot' del paquete 'lattice' que funciona en las pantallas multipanel .

La salida producida por 'filled.contour' es en realidad una combinación de dos parcelas; uno es el contorno lleno y el otro es la leyenda. Dos sistemas de coordenadas separados se configuran para estos dos trazados, pero solo se usan internamente - una vez que la función ha devuelto estos sistemas de coordenadas se pierden. Si desea anotar el diagrama de contorno principal , por ejemplo para agregar puntos, puede especificar comandos de gráficos en el argumento 'plot.axes'. Un ejemplo es que se proporciona a continuación.

Así que, esencialmente, se pasan algunas instrucciones como los parámetros plot.axes para anular el comportamiento estándar.

En su ejemplo:

filled.contour(x = seq(from=-1.5,to=1.5,length=20), 
     y = seq(from=1,to=3.75,length=25), z = mypredict, 
     col = hsv(h=seq(from=2/3,to=0,length=20),s=1,v=1), 
     plot.axes = {axis(1); axis(2); rect(left, bottom, right, top);}) 

Tenga en cuenta que usted tiene que volver a crear los dos ejes de lo contrario no serán aplicadas. Además, no es necesario utilizar la instrucción lines, cuando hay una función rect. :)

Espero que esto ayude

+0

Gracias! ¡Es una gran ayuda! ¡La función rect es también un buen consejo! –

Cuestiones relacionadas