使用
\n
和 cat
(例如)、paste
(例如)、strwrap
(例如) 和 writeLines
( 例如)。但所有这些要么预期此后立即显式打印输出,要么通过 plot
/ggplot
自动进行打印;在后一种情况下,示例通常与(轴)标题相关。
我创建了一个冲积图,它创建了以下图:
来自以下后处理数据表:
我试图强制“FnGpRealm”和“效果类型”列中的某些单元格换行为两行。我尝试过的各种类似方法的示例(仅相关代码块):
dplyr::mutate(FnGpRealm = stringr::str_replace_all(string = FnGpRealm,
pattern = "Ma: Inshore/Shelf",
replacement = paste0("Ma:", "\n", "Inshore/Shelf"))
我也尝试过“妈: “Inshore/Shelf”作为替代品,使用“/n”作为
collapse
中的 paste
,将 writeLines
包裹在整个 str_replace_all
块上......一切都无济于事。如果我尝试 print
/ writeLines
添加 /n
后,该列会完全杀死该列:
tmp$FnGpRealm
1 “妈: 近海/大陆架”
tmp$FnGpRealm <- writeLines(tmp$FnGpRealm)
tmp$FnGpRealm
空。警告消息:未知或未初始化的列:
。FnGpRealm
根据我对
/n
如何在所有这些方面工作的了解程度,似乎具有正则表达式特殊字符(如 /n
)的字符串会被某些函数自动检查(cat
、paste
、writeLines
),可能也在 (gg)plot 调用中,然后在检测到时将它们包装为多行。但是,由于 ggalluvial
使用字符单元格填充其元素,而这些字符单元显然不是以相同的方式自动检查的......有没有办法将这些字符串本地包装在列中?那么当 ggalluvial
打印它们时,它们就已经被包装了?或者这根本就不是一件事?
我的后备措施只是将更短的内容重命名为 Ma/Me,就像我已经对 Macro/mesopredator 所做的那样。但这有点糟糕。
提前致谢!
在你的问题中你提到了“/n”——这是一个错字吗?换行符是“ “(反斜杠,而不是正斜杠)- 这是导致问题的原因吗?
另外,我尝试过但无法在我的系统上重现此问题:
library(tidyverse)
library(palmerpenguins)
library(ggalluvial)
penguins %>%
na.omit() %>%
mutate(species = if_else(species == "Adelie", "Some other \n long name \n for 'Adelie'", species)) %>%
pivot_wider(id_cols = c(species, island, year),
names_from = sex,
values_from = body_mass_g,
values_fn = sum) %>%
ggplot(aes(axis1 = species,
axis2 = island,
y = female)) +
geom_alluvium(aes(fill = factor(year))) +
geom_stratum() +
geom_text(stat = "stratum", aes(label = after_stat(stratum)))
创建于 2023-11-30,使用 reprex v2.0.2