2012-05-11 9 views
1

例で文字列 "r"のX座標を "より良い"文字列でプログラムでキャプチャできますか?私はそれの横に矢印を動的に描画するためにその座標を取得したいと思います。 Rでこれを行うことはできますか?それはSASでできます...いくつかの難しさと。TEXT関数で描画された最後の文字の座標を取得できますか?

x<-c(1,3) 
y<-c(3,3) 
plot(y~x, type="c", ylim=c(-1,5), xlim=c(-3,3), col="red") 
abline(h=0,v=0, lty=3) 
text(0.3, -2.5, xpd=T, "Group 1 better", adj=0) 

#manually draw the arrow 
arrows(x0=1.3, x1=3, y0=-2.5, y1=-2.5, length=0.1, code=2,xpd=T) 

enter image description here

明白なアプローチは、文字列内の文字の数をカウントし、X列の座標にその番号を追加することです。このアプローチは、ほとんどの場合うまくいくでしょうが、テキストのサイズ/スタイル、角度が変化してもうまくいかない場合があります。私は文字列の最後の位置を取得する簡単な方法があるのだろうかと思います。 SASは、前の文字列の内部座標を基準にして矢印を配置します。

可能であれば、他のグラフィック要素の最後の座標をキャプチャする方法も知りたいと思います。

> arrowlabel = "Group 1 better") 
> sw = strwidth(arrowlabel) 
> xpos = 0.3 + sw + sw/nchar(arrowlabel) 

はその後、X = XPOSで始まるあなたの矢印を描く: は、文字列の幅を取得し、スペースのビットのための余分な文字の幅を追加するために、あなたに

+2

'?strwidth'を参照してください... –

答えて

4

使用strwidthをありがとうございます。

+0

私の質問でこの解決策を述べました。この解決策は、文字列のサイズ、スタイル、フォント、または角度が変わらない限り、確実に機能します。 –

+3

@MaxChernyなぜ、 'strwidth'が' cex'や 'font'のような引数を受け入れて、幅を計算するときにその情報を指定できるのか、そうではありませんか? – joran

+1

strwidthは文字列内の文字数をカウントしないことに注意してください。実際にはプロット座標の文字列の長さを計算するので、比例間隔のフォントと文字サイズを処理します。 srtパラメータで角度をつけてプロットしている場合、最終位置を計算するために正弦 - 余弦のビットを少しだけ行う必要があります。 – Spacedman

関連する問題