R:如何将字符列换行以在 ggplot 中打印为 2 行,但它们不是标题?

问题描述 投票:0回答:1

使用

\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 所做的那样。但这有点糟糕。

提前致谢!

r ggplot2 word-wrap ggalluvial
1个回答
0
投票

在你的问题中你提到了“/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

© www.soinside.com 2019 - 2024. All rights reserved.