R barplot:包装长文本标签?

des*_*hen 8 plot r labels word-wrap bar-chart

我指的是这个问题(在水平条形图中自动调整边距).我会在那里问我的问题,但似乎,我还没有这样做的许可.

想象一下水平的条形图(就像在链接的问题中一样),你可能会像我们在社会科学中一样拥有极长的标签(例如,一个调查项目的问题措辞,例如"我感觉不足以解决R中的问题" ).

用户thelatemail提供了一个解决方案,如何根据标签的文本长度移动绘图的开头.这适用于长度为10或15个字符的标签,但如果必须用非常长的标签标记y轴,则无法无限移动绘图的开头.

因此,在特定数量的单词/字符之后包装文本标签更合适,例如,在我的示例中,您可能希望将其包装为:

"I don't feel competent enough
to solve problems in R"
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何在R中包装文本标签,以及如何将包装考虑在内以自动移动绘图的开头.例如,如果我有一个50个字符的标签,并且我将它包装成2行,每行25个字符,那么如果thelatemail的解决方案将考虑到这一点,那将是很好的.

我对这个问题有任何帮助!谢谢!

jra*_*ara 11

Marc Schwartz在他的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)
  }
}
Run Code Online (Sandbox Code Playgroud)

试试吧:

> 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"
Run Code Online (Sandbox Code Playgroud)

要么

> 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"
Run Code Online (Sandbox Code Playgroud)

然后创建一个条形图:

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

在此输入图像描述