2012-04-19 10 views
0

私は距離シーケンスを持っています。これはspatstatで線をプロットしたいと思います。例:距離に基づいてpspオブジェクト上の点をプロットする

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をプロットしたいと思います:

enter image description here

誰もがこれを行う方法を知っているだろう?ヘルプは非常に高く評価されるだろう!

答えて

1

text関数を使用すると、既存のプロットにテキストを追加できます。テキストを回転できるかどうかは、使用しているグラフィックスデバイスによって異なります。?parセクションの 'crt'と 'srt'を参照してください。また、行を隠すのではなく、行の上にテキストを表示する方法については、textの 'adj'引数を参照してください。

このすべては、プロットがベースグラフィックで行われていることを前提としています。

以下、上記のコードを実行した後(デフォルトウィンドウのグラフィックスデバイスを使用して)Windows上で私の仕事:

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

私はあなたのコードを(プロットを通して)実行した後、 'ロケータ'関数を使用して、行の端をクリックし、 'x'と 'y'変数と一致する結果をクリックしました)ので、プロットがベースのグラフィックスであるように見えますが、座標には何も気にしません。与えられた座標を見つけるxとyと線に沿った距離は代数であり、正しい角度が代数と三角であることを見つけると、上のようにテキスト関数を使用します。 –

+0

パーフェクト。ありがとう! – Mikko

関連する問題