2017-08-12 11 views
5

データセットのか​​なり複雑で長い統計解析を実行しています。最終出力の1つは、中央にラベルが付いた8色の四角形のグループです。色とラベルは分析結果に依存し、その多くは作成され、定期的に更新する必要があるため、手動編集はオプションではありません。正方形は2x2 cm2であり、場合によってはラベルが正方形に収まらない場合もあります。私がcexでフォントサイズを小さくすると、テキストが小さくなりすぎます。矩形でテキストを折り返す方法

これは、問題の簡単な例(私はRStudioを使用)です:質問がある

plot.new() 
plot.window(xlim=c(0,5),ylim=c(0,5)) 
rect(1,1,4,4) 
text(2,2,"This is a long text that should fit in the rectangle") 

:どのように私は、自動的に、以下のような長方形で可変長文字列を収めることができ?あなたが分離したい

plot.new() 
plot.window(xlim=c(0,5),ylim=c(0,5)) # Window covers whole plot space 
rect(1,1,4,4) 
text(2.5,3,"This is a long text") 
text(2.5,2.5,"that should fit") 
text(2.5,2,"in the rectangle") 

+0

'plotrix :: textbox'が役に立ちます。 – Henrik

答えて

5

strwidthを組み合わせて、プロットの実際の幅を取得し、strwrapをラップします。それは完璧ではありません(テキストはピクセル幅と文字数で囲まれています)が、ほとんどの場合そうする必要があります。

plot.new() 
plot.window(c(-1,1), c(-1,1)) 

rectangleWidth <- .6 
s <- "This is a long text that should fit in the rectangle" 

n <- nchar(s) 
for(i in n:1) { 
    wrappeds <- paste0(strwrap(s, i), collapse = "\n") 
    if(strwidth(wrappeds) < rectangleWidth) break 
} 

textHeight <- strheight(wrappeds)  

text(0,0, wrappeds) 
rect(-rectangleWidth/2, -textHeight/2, rectangleWidth/2, textHeight/2) # would look better with a margin added  
+0

これはすてきで便利なテクニックです。私は飛行機の異なる位置に多くの四角形を持っているので、元の寸法を維持し、正しい中心を見つけることは容易ではないということを好みました。 – JASC

+0

このようなものがrect()やpolygon()などのオプション(text = ...など)に実際に含めることができるのだろうかと思います。 – JASC

+0

長方形の角の座標を取り、幅を計算する関数にコードをラップすることができます。 'pos'や' adj'のような 'text'引数を使って、テキストの開始位置を与えられた座標に対して相対的に設定します。 –

2

使用リターンエスケープ文字。以下のコードを見て解釈してください。

plot.new() 
plot.window(xlim=c(0,5),ylim=c(0,5)) 
rect(0,0,4,4) 
text(2,2,"This is a long text\nthat should fit\nin the rectangle") 

希望します。 :)

+1

ご協力いただきありがとうございます。これは特定の例を解決しますが、一般的な問題は解決しません。 – JASC

関連する問題