2010-08-06 12 views
8

Sto tentando di aggiungere frecce che segnano coordinate x specifiche sotto l'asse x in un diagramma R. Il mio asse x è a y = 0 e quando provo a usare le coordinate y negative in arrows, quindi le frecce saranno perpendicolari all'asse x, ottengo solo i bordi della freccia (anche se c'è spazio, e, g dove sono tracciati l'etichetta dell'asse x e i segni di spunta).Aggiunta di una freccia sotto l'asse x nei grafici R

risposta

10

L'opzione XPD può essere utilizzato in frecce in modo da poter basta impostare le coordinate di essere fuori dalla tua regione trama e impostare XPD TRUE. Ad esempio, supponendo Xlim = c (0,10) e ylim = (0,10), e impostare l'asse x 0 allora

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

disegna una freccia verticale rivolta verso l'alto a x-asse posizione 1.4 su quell'asse.

+0

+1 Grazie. Bello e semplice! –

+0

Fantastico! Molte grazie! +1 – ECII

+0

L'unico problema con questo approccio è che se si ridimensiona il grafico (sto usando Rstudio) le frecce si incasinano. – ECII

3

È possibile eseguire questa operazione aggiungendo una sovrapposizione aggiuntiva, chiamando par(new=TRUE), con margini ridotti. Per esempio:

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 

Edit: Se si desidera mantenere le stesse coordinate, come nella trama originale, è necessario scegliere con attenzione i limiti X e Y assi. Questo è belo illustrato:

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 Grazie, ma come posso tracciare le mie frecce su una specifica coordinata x nel grafico originale? Prima di chiamare 'par (new = TRUE)', se disegno frecce (10,1,20,1) passerebbe da (10,1) a (20,1) nel mio sistema di coordinate del grafico; dopo aver chiamato 'par (new = TRUE)' Ho bisogno in qualche modo di convertire nuove coordinate in quelle vecchie ... –

+0

Grazie! Ho pensato che questo genere di cose fosse abbastanza comune. –

+0

In realtà, non ho mai dovuto farlo da solo. C'è probabilmente un modo più ordinato di farlo. – nullglob

Problemi correlati