2013-11-27 28 views
6

Tôi đang đề cập đến câu hỏi này (Automatic adjustment of margins in horizontal bar chart). Tôi sẽ hỏi câu hỏi của tôi ngay tại đó, nhưng có vẻ như, tôi chưa được phép làm như vậy.R barplot: gói nhãn văn bản dài?

Hãy tưởng tượng một thanh ngang (như trong câu hỏi được liên kết), nơi bạn có thể có các lables cực dài như chúng tôi luôn có trong khoa học xã hội (ví dụ như từ ngữ câu hỏi của một mục khảo sát như "Tôi không cảm thấy đủ thẩm quyền để giải quyết vấn đề trong R ").

Người dùng thelatemail đưa ra giải pháp cách di chuyển phần đầu của cốt truyện tùy thuộc vào độ dài văn bản của nhãn. Điều đó hoạt động tốt cho các nhãn có độ dài là 10 hoặc 15 ký tự nhưng nếu bạn phải gắn nhãn trục y của bạn với các nhãn rất dài, bạn không thể di chuyển phần đầu của ô.

Vì vậy, nó là thích hợp hơn để bọc các nhãn văn bản sau khi một số spefific các từ/ký tự, ví dụ, trong ví dụ của tôi bạn có thể muốn quấn nó như thế này:

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

Tuy nhiên, tôi don' t biết làm thế nào để bọc các nhãn văn bản trong R và hơn nữa làm thế nào để đưa gói vào tài khoản cho việc di chuyển tự động của sự khởi đầu của cốt truyện. Ví dụ, nếu tôi có một nhãn gồm 50 ký tự và tôi quấn nó thành 2 dòng gồm 25 ký tự, thì sẽ rất tuyệt nếu giải pháp thelatemail sẽ tính đến điều này.

Tôi đánh giá cao bất kỳ trợ giúp nào về vấn đề này! Cảm ơn!

Trả lời

7

Có một giải pháp khả thi được trình bày bởi Marc Schwartz trong bài viết của mình để 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) 
    } 
} 

Thử:

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

hoặc

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

và sau đó tạo ra một 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

Điều này thật tuyệt; cho bất cứ ai đến cùng ở đây được tự hỏi, nó cũng hoạt động hoàn hảo cho văn bản thông thường:

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

Các vấn đề liên quan