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)
