2010-08-06 42 views
8

Estoy tratando de agregar flechas que marquen coordenadas x específicas debajo del eje x en un diagrama R. Mi eje x está en y = 0 y cuando trato de usar coordenadas y negativas en arrows, entonces las flechas serán perpendiculares al eje x, obtengo solo los bordes de la flecha graficados (aunque hay un espacio, e, g donde se trazan la etiqueta del eje xy las marcas de graduación).Agregando una flecha debajo del eje x en R gráficas

Respuesta

10

La opción XPD puede ser utilizado en las flechas por lo que sólo puede establecer sus coordenadas a estar fuera de su región de trama y conjunto XPD en TRUE. Por ejemplo, suponiendo xlim = c (0,10) y ylim = (0,10), y establecer que el eje x a 0 entonces

arrows(1.4, -1, 1.4, 0, xpd = TRUE) 

dibuja una flecha vertical que apunta hacia arriba en el eje x en posición 1.4 en ese eje.

+0

+1 Gracias. ¡Agradable y simple! –

+0

¡Fantástico! ¡Muchas gracias! +1 – ECII

+0

El único problema con este enfoque es que si cambia el tamaño del gráfico (estoy usando Rstudio) las flechas se arruinan. – ECII

3

Puede hacerlo agregando una superposición adicional, llamando al par(new=TRUE), con márgenes reducidos. Por ejemplo:

plot(1,1) ## start a plot 
opar <- par(new = TRUE, ## add a new layer 
      mar = c(0,0,0,0)) ## with no margins margins 
## set up the plotting area for this layer 
plot(1,1,xlim=c(0,1),ylim=c(0,1),type='n',xlab='',ylab='') 
arrows(0.1,0.05,0.5,0.05) ## add arrow 
par(opar) ## return the plot parameters to their prior values 

Editar: Si desea mantener las mismas coordenadas que en la trama original, usted tiene que elegir los límites ejes X e Y con cuidado. Esto es ilustrado Belo:

plot(1,1,xlim=0:1,ylim=0:1) 
arrows(0.1,0.05,0.5,0.05) 
gpar <- par() 
opar <- par(new = TRUE, mar = c(0,0,0,0),xaxs='i',yaxs='i') 

m1 <- (gpar$usr[2] - gpar$usr[1])/(gpar$plt[2] - gpar$plt[1]) 
c1 <- gpar$usr[1] - m1*gpar$plt[1] 
m2 <- (gpar$usr[4] - gpar$usr[3])/(gpar$plt[4] - gpar$plt[3]) 
c2 <- gpar$usr[3] - m2*gpar$plt[3] 
xlim <- c(c1, m1 + c1) 
ylim <- c(c2, m2 + c2) 

plot(1,1,xlim=xlim,ylim=ylim,type='n',xlab='',ylab='') 
arrows(0.1,0.05,0.5,0.05,col='red') 
points(1,1,col='red') 
par(opar) 
+0

+1 Gracias, pero ¿cómo puedo trazar mis flechas en una coordenada x específica en el diagrama original? Antes de llamar 'par (new = TRUE)', si dibujo flechas (10, 1, 20, 1) iría de (10, 1) a (20, 1) en mi sistema de coordenadas de gráfico; después de llamar 'par (new = TRUE)' Necesito de alguna manera convertir nuevas coordenadas a las anteriores ... –

+0

¡Gracias! Pensé que este tipo de cosas es bastante común. –

+0

En realidad, nunca tuve que hacerlo yo mismo. Probablemente haya una forma más ordenada de hacerlo. – nullglob

Cuestiones relacionadas