2013-11-27 2 views
6

나는이 질문 (Automatic adjustment of margins in horizontal bar chart)을 언급하고있다. 나는 내 질문에 바로 그 질문을했을 것이다. 그러나 나는 아직 그렇게 할 권한이 없다.바코드 : 긴 텍스트 라벨 래핑?

우리는 사회 과학 분야에서 항상 가지고있는 극단적 인 긴 lables를 가질 수있는 수평 바 롯트 (예 : 링크 된 질문과 같음)를 상상해보십시오 (예 : "나는 해결할 능력이 충분하지 않습니다. R의 문제 ").

사용자 편지 대기열은 레이블의 텍스트 길이에 따라 플롯의 시작을 이동하는 방법을 설명했습니다. 길이가 10 또는 15 자라고하자. 그러나 매우 긴 레이블로 y 축에 레이블을 지정해야한다면 음모의 시작을 무한히 이동할 수 없습니다.

따라서, 예를 들어, 단어/문자의 spefific 번호 다음에 텍스트 레이블을 래핑하는 것이 더 적절하다, 내 예제에서이처럼 포장 할 수 있습니다 :

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

그러나, 나는 돈 ' R에서 텍스트 레이블을 래핑하는 방법을 알고 있으며 줄거리의 시작 부분이 자동으로 이동하는 것을 고려하여 줄 바꿈을 처리하는 방법을 알고 있습니다. 예를 들어, 50 자의 레이블이 있고 각 문자를 25 자로 2 줄로 감싸는 경우 laterailail의 해답을 고려하면 좋을 것입니다.

이 문제와 관련하여 도움을드립니다. 감사합니다.

답변

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

: 사람이 여기 궁금가 따라오고, 그것은 또한 일반 텍스트를 완벽하게 작동