2012-04-19 2 views
0

거리 시퀀스가 ​​있는데, spatstat에 선을 그립니다. 예 :이 작업을 수행하는 방법을거리를 기반으로 psp 객체에 점을 그려야합니다.

enter image description here

사람이 알겠습니까 :

library(spatstat) 

x <- c(0.3, 5) 
y <- c(3, 1.2) 

range.x <- c(0, max(x)+0.2) 
range.y <- c(0, max(y)+0.2) 

owin <- owin(range.x, range.y) 
the.line <- psp(x0 = x[1],x1 = x[2],y0 = y[1],y1 = y[2], window = owin) 

plot(the.line)  

seqs <- data.frame(name = seq(1,7), distance = c(0.12, 0.3, 0.45, 0.5, 0.7, 0.89, 0.95)) 
lengths <- seqs$distance*lengths.psp(the.line) 

나는 (라벨 일러스트와 함께 추가)는 다음과 같은 방법으로 레이블로 seqs$name를 사용 the.line 위에 lengths 음모 싶습니다 ? 도와 주시면 대단히 감사하겠습니다!

답변

1

text 기능을 사용하면 기존 플롯에 텍스트를 추가 할 수 있습니다. 텍스트를 회전 할 수 있는지 여부는 사용중인 그래픽 장치에 따라 다르며, 'crt'및 'srt'에 대해서는 ?par 섹션을 참조하십시오. 또한 줄을 어둡게하는 대신 줄 위의 텍스트를 얻는 방법에 대해서는 text의 'adj'인수를 참조하십시오.

이 모두는 기본 그래픽에서 플로팅이 수행되고 있다고 가정합니다.

다음 위의 코드를 실행 한 후 (기본 윈도우 그래픽 장치를 사용하여) 창에 나를 위해 일한 :

x.new <- seqs$distance*x[2] + (1-seqs$distance)*x[1] 
y.new <- seqs$distance*y[2] + (1-seqs$distance)*y[1] 

tmp.x <- grconvertX(x, to='inches') 
tmp.y <- grconvertY(y, to='inches') 
theta <- atan2(diff(tmp.y),diff(tmp.x))*180/pi 

text(x.new, y.new, seqs$name, adj=c(0,0), srt=theta) 
+0

음 ... 나는 음모 내 다소 복잡한 데이터를 계산하는 spatstat를 사용한 그래서 플롯팅은 spatstat window (owin)에서 수행되어야합니다. 게다가 나는 텍스트의 좌표를 모른다. 선을 따라 거리 만. – Mikko

+0

방금 ​​위의 코드를 실행 한 다음 'locator'함수를 사용하여 줄의 끝을 클릭하고 'x'및 'y'변수와 일치하는 결과를 클릭했습니다 (클릭하는 데 약간의 오류가 있음).) 따라서 플롯이 기본 그래픽에있는 것처럼 보이며 좌표와 관련하여 아무 것도하지 않습니다. 주어진 좌표 x와 y와 선을 따라 거리를 찾는 것은 대수학입니다. 정확한 각도를 찾는 것은 대수와 삼각법입니다. 그런 다음 위와 같이 텍스트 함수를 사용하십시오. –

+0

완벽합니다. 감사! – Mikko

관련 문제