2010-08-06 13 views
8

Ich versuche, Pfeile hinzuzufügen, die bestimmte x-Koordinaten unterhalb der x-Achse in einem R-Plot markieren. Meine x-Achse ist bei y = 0 und wenn ich versuche, negative y-Koordinaten in arrows zu verwenden, so dass die Pfeile senkrecht zur x-Achse sind, bekomme ich nur die äußersten Kanten des Pfeils gezeichnet (obwohl ein wenig Platz, e, g wo die X-Achsen-Label und die Strichmarken geplottet werden).Hinzufügen eines Pfeils unter der x-Achse in R-Plots

Antwort

10

Die xpd Option kann in Pfeilen verwendet werden, so dass Sie nur Ihre Koordinaten festlegen können außerhalb Ihrer Plotregion zu sein und Set XPD auf TRUE. Beispiel: = Xlim = c (0,10) und ylim unter der Annahme (0,10), und stellen Sie die x-Achse auf 0 dann

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

zieht einen senkrechten Pfeil auf der x-Achse zeigt nach oben auf Position 1.4 auf dieser Achse.

+0

+1 Danke. Schön und einfach! –

+0

Fantastisch! Danke vielmals! +1 – ECII

+0

Das einzige Problem mit diesem Ansatz ist, dass wenn Sie die Grafikgröße ändern (ich verwende Rstudio) die Pfeile durcheinander gebracht werden. – ECII

3

Sie können dies tun, indem Sie ein zusätzliches Overlay hinzufügen, indem Sie par(new=TRUE) mit reduzierten Margen aufrufen. Zum Beispiel:

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: Wenn Sie die gleichen Koordinaten wie in dem ursprünglichen Plot behalten wollen, müssen Sie die x- und y-Achse Grenzen sorgfältig wählen. Dies veranschaulicht 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 Danke, aber wie kann ich meine Pfeile auf einer bestimmten x-Koordinate in der ursprünglichen Handlung plotten? Bevor ich 'par (new = TRUE)' nenne, würde ich, wenn ich Pfeile (10,1,20,1) zeichne, in meinem Graphkoordinatensystem von (10,1) zu (20,1) gehen; nach dem Aufruf von 'par (new = TRUE)' muss ich irgendwie neue Koordinaten in alte umwandeln ... –

+0

Danke! Ich dachte, das ist ziemlich normal. –

+0

Eigentlich musste ich es nie selbst machen. Es gibt wahrscheinlich eine bessere Art, es zu tun. – nullglob

Verwandte Themen