在 ggalluvial 中为 alluvia 添加标签

add labels to alluvia in ggalluvial

是否可以在 ggalluvial 中为冲积层添加标签?

示例图:

library(ggalluvial)
data(vaccinations)
levels(vaccinations$response) <- rev(levels(vaccinations$response))
ggplot(vaccinations,
       aes(x = survey, stratum = response, alluvium = subject,
           y = freq,
           fill = response, label = response)) +
  scale_x_discrete(expand = c(.1, .1)) +
  geom_flow() +
  geom_stratum(alpha = .5) +
  geom_text(stat = "stratum", size = 3) +
  theme(legend.position = "none") +
  ggtitle("vaccination survey responses at three points in time")

现在我想将主题 id/nrs 作为标签添加到冲积层(而不是框)。 有没有可能这样做? 我的原始数据每个冲积层的受试者要少得多(例如 2-5)。

我很想知道完成此任务的更好方法!这是我遇到的最不坏的把戏的例子。您的代码的主要更改如下:

  • 美学映射 label = response 已从 ggplot() 调用移至(第一个)geom_text() 层,因此它不会干扰其他文本层。
  • 额外的 geom_text() 层与流量统计配对,以便标记每个 "flow" 图形元素。请注意,此类元素的数量多于视觉上无法区分的元素。
  • 新的文字层使用了新的美学贴图label = as.character(subject);主题(实际上是队列)ID 是数字,因此省略对字符的强制转换会导致它们毫无意义地加在一起。 (也许这种行为应该可以通过一个新参数来控制?)
  • 新的文字层使用美学贴图color = survey == "ms153_NSA"为了将第一个时间点和后两个时间点分开,手动色标使其不可见(注意:NA将是比 "00000000") 和其他黑色更合适。尽管请参阅下面的注释。 (设置 data = subset(vaccinations, survey != "ms_153_NSA") 似乎具有相同的效果,但实际上它可能会混淆标签,因为当删除第一个时间点时,流量统计会以不同方式划分流量。)
  • 标签从地层偏移到流上 nudge_x = -.25

注意:像这样的东西可以用冲积层统计产生所需的行为,但流量统计会在中间时间点(或除first 和 last),这并不总是一致,因为流在​​左侧和右侧的排列不同。 vignette about stratum and lode ordering 中有一些玩具示例。我认为目前没有任何解决方法。

library(ggalluvial)
#> Loading required package: ggplot2
data(vaccinations)
levels(vaccinations$response) <- rev(levels(vaccinations$response))
ggplot(vaccinations,
       aes(x = survey, stratum = response, alluvium = subject,
           y = freq,
           fill = response)) +
  scale_x_discrete(expand = c(.1, .1)) +
  geom_flow() +
  geom_stratum(alpha = .5) +
  geom_text(aes(label = response),
            stat = "stratum", size = 3) +
  geom_text(aes(label = as.character(subject), color = survey == "ms153_NSA"),
            stat = "flow", size = 3, nudge_x = -.25) +
  scale_colour_manual(values = c("#000000ff", "#00000000")) +
  theme(legend.position = "none") +
  ggtitle("vaccination survey responses at three points in time")

reprex package (v0.3.0)

于 2020 年 2 月 19 日创建