2013-11-27 74 views
6

我指的是這個問題(Automatic adjustment of margins in horizontal bar chart)。我會在那裏問我的問題,但看來,我還沒有權限這樣做。R barplot:包裝長文本標籤?

設想一個水平的barplot(就像在相關的問題中),你可能會有很長的標籤,就像我們在社會科學中一直有的那樣(例如一個調查項目的問題措辭,例如「我覺得不夠有能力去解決問題在R「)。

用戶thelatemail給出了一個解決方案如何根據標籤的文本長度來移動繪圖的開始。對於長度爲10或15個字符的標籤,這很合適,但如果您必須用很長的標籤標記y軸,則無法無限移動繪圖的開始。

因此,它更合適的詞/字符,例如一個spefific數後換的文本標籤,在我的例子,你可能想將其包裝像這樣:

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

不過,我不不知道如何在R中包裝文本標籤,並且還知道如何將包裝考慮到劇情開始的自動移動。例如,如果我有50個字符的標籤,並將其包裝成每行25個字符的2行,那麼如果電郵的解決方案將考慮到這一點,那將是非常好的。

我讚賞這個問題的任何幫助! 謝謝!

回答

7

有一個在他的職位由馬克·施瓦茨向R-help一個可能的解決方案:

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) 
    } 
} 

試試:

> 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:

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