【问题标题】:R barplot: wrapping long text labels?R barplot:包装长文本标签?
【发布时间】:2013-12-13 00:17:19
【问题描述】:

我指的是这个问题 (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 的解决方案能够考虑到这一点,那就太好了。

感谢任何有关此问题的帮助! 谢谢!

【问题讨论】:

    标签: r plot bar-chart labels word-wrap


    【解决方案1】:

    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)
    

    【讨论】:

      【解决方案2】:

      这太棒了;对于任何来这里想知道的人,它也适用于常规文本:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-25
        • 2020-07-10
        • 2017-09-25
        • 2014-11-10
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多