【问题标题】:ggplot2: Splitting facet/strip text into two linesggplot2:将构面/条带文本分成两行
【发布时间】:2012-02-21 14:02:03
【问题描述】:

考虑以下带有长刻面/条形文本的 ggplot2 图 断成两行。 文本超出了专门用于构面标题的区域。

library(ggplot2)
x <- c(1:3, 1:3)
y <- c(3:1, 1:3)
grp <- c(0, 0, 0, 1, 1, 1)
p <- qplot(x=x, y=y) + geom_line() + facet_wrap(~ grp)
grob <- ggplotGrob(p)
strip.elem.y <- grid.ls(getGrob(grob, "strip.text.x", 
                grep=TRUE, global=TRUE))$name
grob <- geditGrob(grob, strip.elem.y[1], 
        label="First line and\n second line" )
grid.draw(grob)

有没有办法增加条形文字区域的高度?

【问题讨论】:

  • 您可以在transform 中使用来自stringrstr_wrap 函数。详情请见Ista's answer

标签: r graph ggplot2 facet-wrap


【解决方案1】:

ggplot2 支持使用label_wrap_gen 的内置方法。

x <- c(1:3, 1:3)
y <- c(3:1, 1:3)
grp = c(rep("group 1 with a long name",3),rep("group 2 with a long name",3))
d = data.frame(x = x, y =y, grp = grp)
ggplot(d, aes(x=x,y=y)) + geom_line() + facet_wrap(~ grp, labeller = label_wrap_gen(width=10))

【讨论】:

    【解决方案2】:

    您可以使用 2 行标签:

    grp <- c(rep("foo\nbar",3), 1, 1, 1)
    qplot(x=x, y=y) + geom_line() + facet_wrap(~ grp)
    

    【讨论】:

    • +1 非常简单,可以完全控制您希望中断出现的位置。这应该是 IMO 的首选解决方案。
    【解决方案3】:

    我尝试了多种方法,但很沮丧让paste(strwrap(text, width=40), collapse=" \n") 为我提供单行数据的结果,而不是连接整个列表中的每一位文本。

    我想出了一个最适合我的解决方案。我写了一个类似下面的函数。给定一个数据框data,列text

    wrapit <- function(text) {
      wtext <- paste(strwrap(text,width=40),collapse=" \n ")
      return(wtext)
    }
    
    data$wrapped_text <- llply(data$text, wrapit)
    data$wrapped_text <- unlist(data$wrapped_text)
    

    调用此函数后,我只是将labeller 函数应用于wrapped_text 列,而不是text 列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2018-01-23
      • 2017-10-03
      • 2020-10-13
      • 2011-09-24
      • 1970-01-01
      相关资源
      最近更新 更多