从多个因素之一在 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面图)的文本实战