从多个因素之一在 facet_grid 中包装文本

Posted

技术标签:

【中文标题】从多个因素之一在 facet_grid 中包装文本【英文标题】:Wrapping text in facet_grid from one of multiple factors 【发布时间】:2022-01-14 14:51:01 【问题描述】:

如果我在 facet_grid 中有多个因子(类似于 facet_grid(cyl ~ am + vs),是否可以仅从其中一个因子换行(仅 am 而不是 vs)?让我们以 MTCARS df 为例,但是am 不是 0 和 1,想象一下我有很长的标签。:

mtcars2 <- mtcars
mtcars2$am <- factor(mtcars2$am,
                    levels = c(0,1),
                    labels = c("this is a very very very looooooooooooong label", 
                               "this is also a very very very looooooooooooong label"))

ggplot(mtcars2, aes(wt,mpg)) +
  geom_point() +
  facet_grid(cyl ~ am + vs)

这会产生这个情节:

我可以使用labeller = label_wrap_gen() 包装该变量,这会显着增加该框的高度(几乎可以这样),但包含vs 的框的高度与@987654332 的新高度相同@。因为我的第二个因素很小(0/1),所以它不需要和第一个因素的高度相同。

在我的实际数据集中,我的绘图是一个 7 x 6 的网格,我的标签环绕成 6 行(它们并没有那么长,真的,只是有这么多框,每个人的宽度情节要窄得多,所以,我需要我能得到的所有空间来让这个看起来不错。

【问题讨论】:

您可以为长标签版本添加示例输出吗?很难准确地描绘出您所描述的内容。此外,尝试将帖子限制为一个问题——也许将第二个问题拆分为另一个独立的帖子 感谢您的反馈。我已经编辑了帖子。 一般建议:如果你有很多方面塞满和长标签,也许退后一步弄清楚你是否 1) 真的同时需要所有这些方面,并且2)真的需要标签中的所有文字。当我遇到类似的空间问题时,我会重新评估我是否真的需要我想要绘制的所有内容;很多时候,我没有 【参考方案1】:

我不知道具体包装其中一个标签,但 ggh4x 包有一些附加选项,用于听起来适合您问题的其他部分的条带。

让我们首先编辑示例以实际显示您遇到的问题。在下图中,您可以看到是/否标签相对于它们的大小而言被赋予了过多的空间。

library(ggplot2)

df <- mtcars
df <- transform(
  df,
  am = ifelse(am, "I'm a label that is too long", 
              "I'm an even longer label that exceeds strip boundaries"),
  vs = ifelse(vs, "Yes", "No")
)

p <- ggplot(df, aes(wt, mpg)) +
  geom_point()
p + facet_grid(cyl ~ am + vs, labeller = label_wrap_gen())

ggh4x 中的构面接受 strip 参数(更多信息 here),您可以使用它来修剪多余的空间,也可以将其中一个图层设置为使用粗体文本而不是纯文本。

library(ggh4x)
#> Warning: package 'ggh4x' was built under R version 4.1.1
p + facet_grid2(
  cyl ~ am + vs, labeller = label_wrap_gen(),
  strip = strip_themed(
    size = "variable", # Shrinks 2nd layer
    text_x = elem_list_text(face = c(1, 2)), # 2nd layer in bold
    by_layer_x = TRUE
  ))

由reprex package (v2.0.0) 于 2021 年 12 月 10 日创建

免责声明:我是 ggh4x 的作者

【讨论】:

以上是关于从多个因素之一在 facet_grid 中包装文本的主要内容,如果未能解决你的问题,请参考以下文章

R:ggplot2:facet_grid:如何在少数(不是全部)标签中包含数学表达式?

R语言ggplot2可视化使用facet_grid构建多个子图(facet面图)并自定义每个子图(facet面图)的文本实战

Intellij:如何在 Javadoc 中包装一段文本?

在Constraint布局中包装文本

React Router 在一个重定向中包装多个路由

到达屏幕结束时在 UITableView 自定义单元格中包装文本(Swift)