2016-05-27 6 views
2

Ich benutze Layout, um mehrere Dinge zu plotten, und ich möchte Pfeil zwischen einigen dieser Plots hinzufügen. Ich habe grid.curve und grid.lines() versucht, aber bisher kein Glück. Hier ist ein Beispiel dafür, was Ich mag würde tun:R: Hinzufügen von Pfeilen zu den Rastern des Layouts

mat <- cbind(matrix(c(1:3,0,4:5,0,6,7),3,3,byrow=T), 8:10) 
m<-layout(mat) 
layout.show(m) 
cars <- c(1, 3, 6, 4, 9) 
trucks <- c(2, 5, 4, 5, 12) 
plot(cars, type="o", col="blue") 
plot(trucks, type="o", pch=22, lty=2, col="red") 
plot(cars, type="o", col="blue", ylim=c(0,12)) 
lines(trucks, type="o", pch=22, lty=2, col="red") 
barplot(cars) 
barplot(trucks) 
hist(cars) 
pie(cars) 
library(gplots) 
textplot(mat) 

Ich mag würde einen Pfeil von Grundstück (layout.pos.col = 2, layout.pos.row = 1) hinzuzufügen, plotten (layout.pos.col = 2, layout.pos.row = 2) und eins von (layout.pos.col = 2, layout.pos.row = 2) nach (layout.pos.col = 3, layout.pos. Reihe = 3). Gibt es eine einfache Möglichkeit, diese hinzuzufügen?

Vielen Dank im Voraus!

Antwort

3

könnten Sie geben arrows ein gehen, wenn Sie nichts Besonderes benötigen. Zwei einfache schwarze gerade Pfeile:

x <- -2 
y <- -0.1 
arrows(x0=x, y0=y, x1=x, y1=y-0.2, xpd=NA, length=0.05) 

x <- -1.55 
y <- -1.3 
arrows(x0=x, y0=y, x1=x+0.5, y1=y-0.6, xpd=NA, length=0.05) 

ich die Koordinaten völlig Throught Versuch und Irrtum herausgefunden, könnte es intelligentere Wege sein. xpd=NA ist wichtig, um das Zeichnen zwischen Plotbereichen zu ermöglichen.

enter image description here

+0

Vielen Dank, aber da mein Layout ein bisschen größer ist, kann es schwierig und zeitraubend sein, die Koordinaten herauszufinden. Ich habe einige Nummern versucht, aber noch keine Pfeile. – Noosh

+1

Ich denke, Sie können die Koordinaten wie folgt herausfinden: 'f <- Funktion (x1, y1, x2, y2, ...) Pfeile (grconvertX (x1," ndc "), grconvertY (y1," ndc "), grconvertX (x2, "ndc"), grconvertY (y2, "ndc"), xpd = NA, ...); getFig <- funktion (col, row, nrows = 3, ncols = 4) c (col * 1/ncols - (1/ncols/2), 1 - ((row) * 1/nrows - (1/nrows/2))); do.call (f, c (as.list) (c (getFig (1,1), getFig (2,2))), liste (col = "rot"))). Oder Sie verwenden 'grid', um die Pfeile zu zeichnen. – lukeA

0

Ich versuchte es in elementarer Art und Weise zu lösen.

: 
textplot(mat) 

par.old <- par(no.readonly=T)   # preserve old par 
par(new=T, mfrow=c(1,1), mar=c(0,0,0,0)) 
plot(0,0, type="n", axes=F, ann=F)  # make empty plot 

a <- locator(4)       # locator() returns xy coordinates at a click point 
# click on the plot four times (first arrow's start point, end point, second arrow's …) 

arrows(a$x[1], a$y[1], a$x[1], a$y[2], length=0.1) # use same x (a$x[2] is unnecessary). 
arrows(a$x[3], a$y[3], a$x[4], a$y[4], length=0.1) 

par(par.old) 
+0

Danke, aber das würde nicht für mich arbeiten, da ich mehrere dieser Plots generieren muss, so macht es keinen Sinn, locator() jedes Mal zu verwenden, und ich verwende auch layout(). – Noosh

Verwandte Themen