我指的是这个问题(Automatic adjustment of margins in horizontal bar chart)。我会在那里问我的问题,但似乎,我还没有这样做的许可。
想象一下水平的条形图(就像在链接的问题中一样),你可能会像我们在社会科学中一样拥有极长的标签(例如,调查项目的问题措辞,例如“我觉得不足以解决问题在R“)。
用户 thelatemail 提供了一个解决方案,如何根据标签的文本长度移动绘图的开头。这适用于长度为10或15个字符的标签,但如果必须用非常长的标签标记y轴,则无法无限地移动绘图的开头。
因此,在特定数量的单词/字符之后包装文本标签更合适,例如,在我的示例中,您可能希望将其包装为:
"I don't feel competent enough
to solve problems in R"
但是,我不知道如何在R中包装文本标签以及如何将包装考虑在内以自动移动绘图的开头。例如,如果我有一个50个字符的标签,并且我将它包装成2行,每行25个字符,那么如果 thelatemail 的解决方案将考虑到这一点,那就太棒了。
我对这个问题提出了任何帮助! 谢谢!
答案 0 :(得分:10)
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)
}
}
试一试:
> 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"
然后创建一个条形图:
wr.lap <- wrap.labels(a, 10)
barplot(1:2, names.arg = wr.lap, horiz = T, las = 2, cex.names = 0.5)
答案 1 :(得分:0)