2013-11-27 7 views
6

私はこの質問(Automatic adjustment of margins in horizontal bar chart)を参照しています。私はそこに私の質問をしていただろうが、私はまだそうする許可がないようだ。Rバープロット:長いテキストラベルを折り返しますか?

私たちが常に社会科学で持っているように、極端な長いlablesを持っているかもしれない水平の棒グラフ(リンクされた質問のような)を想像してください(例えば、 "私は解決するほど能力があるとは思わないRの問題点)。

ユーザーメールメールは、ラベルのテキストの長さに応じてプロットの先頭を移動する方法を解決しました。長さが10〜15文字のラベルに対してはうまくいきますが、非常に長いラベルでY軸にラベルを付ける必要がある場合、プロットの先頭を無限に移動することはできません。

したがって、私の例では、あなたがこのようにそれをラップすることがあります、例えば、言葉/文字のspefific番号の後にテキストラベルをラップする方が適切である:

"I don't feel competent enough 
to solve problems in R" 

しかし、私は「ドンRにテキストラベルをラップする方法、さらにはプロットの開始点の自動移動を考慮してラップをどのように考慮するかを知っています。たとえば、ラベルが50文字で、25文字ずつ2行にまとめると、llメールのという解決策が考慮されるとすばらしいことになります。

私はこの問題に関して何か助けてください! ありがとう!

答えて

7

R-helpに彼のポストでマーク・シュワルツによって提示された1つの可能な解決策があります:

> wrap.labels(a, 10) 
[1] "I don't\nfeel\ncompetent\nenough to\nsolve\nproblems\nin R" 
[2] "I don't\nfeel\ncompetent\nenough to\nsolve\nproblems\nin R" 

または

> wrap.labels(a, 25) 
[1] "I don't feel competent\nenough to solve problems\nin R" 
[2] "I don't feel competent\nenough to solve problems\nin R" 

をしてからbarplotを作成します。

a <- c("I don't feel competent enough to solve problems in R", "I don't feel competent enough to solve problems in R") 

# Core wrapping function 
wrap.it <- function(x, len) 
{ 
    sapply(x, function(y) paste(strwrap(y, len), 
           collapse = "\n"), 
     USE.NAMES = FALSE) 
} 


# Call this function with a list or vector 
wrap.labels <- function(x, len) 
{ 
    if (is.list(x)) 
    { 
    lapply(x, wrap.it, len) 
    } else { 
    wrap.it(x, len) 
    } 
} 

はそれを試してみてください。

wr.lap <- wrap.labels(a, 10) 
barplot(1:2, names.arg = wr.lap, horiz = T, las = 2, cex.names = 0.5) 

enter image description here

0

これは素晴らしいです。不思議に思っている、ここで一緒に来て、誰のために、それはまた、通常のテキストのために完璧に動作します:

plot(1:10, 1:10) 
txt <- "Lorem ipsum dolor sit amet, consectetur adipiscing elit" 
text(8, 3.5, wrap.labels(txt, 10), cex=0.8, pos=4) 

enter image description here

関連する問題