2013-11-27 22 views
6

Bu soruya atıfta bulunuyor (Automatic adjustment of margins in horizontal bar chart). Sorumu orada sorardım, ama öyle görünüyor ki, henüz yapma iznim yok.R dikme: uzun metin etiketlerini sarma?

Her zaman sosyal bilimlerimizde olduğu gibi aşırı uzun lablilere sahip olabileceğiniz yatay bir barplot (bağlantılı sorudaki gibi) düşünün (örneğin, anket gibi bir anketin ifadesi gibi) "Çözecek kadar yetkin hissetmiyorum R ") sorunları.

Kullanıcı thelatemail kullanıcısı, etiketlerin metin uzunluğuna bağlı olarak grafiğin başlangıcını nasıl hareket ettireceğine dair bir çözüm verdi. Bu, 10 veya 15 karakter uzunluğunda etiketler için işe yarar, ancak y ekseninizi çok uzun etiketlerle etiketlemek zorunda kalırsanız, arsa başlangıcını sonsuza kadar taşıyamazsınız.

Böylece, örneğin kelimelerin/karakterler, bir spefific sayısının ardından metin etiketlerini kaydırmak için daha uygundur, benim örnekte böyle sar isteyebilirsiniz:

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

Ancak, ben don' Metin etiketlerinin R'ye nasıl sarılacağını ve ayrıca, grafiğin çiziminin başlangıcının otomatik olarak taşınmasını nasıl hesaba katacağını bilmek. Örneğin, 50 karakterlik bir etiketim varsa ve her biri 25 satırlık 2 satıra sardığımda, thelatemail çözümünün bunu hesaba katması harika olur.

Bu sorunla ilgili herhangi bir yardım için minnettarım! Teşekkürler!

cevap

7

R-help için görevinden Marc Schwartz tarafından sunulan olası bir çözüm var:

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

Deneyin:

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

veya

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

ve daha sonra bir barplot oluşturun:

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

bu harika;

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

: herkes burada merak olduğunu birlikte geliyor için, o da normal metin için mükemmel çalışıyor