добавить ярлыки для аллювии в ggalluvial - PullRequest
1 голос
/ 19 февраля 2020

Есть ли возможность добавить метки в аллювию в 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")

Теперь я хотел бы добавить идентификатор субъекта / номер в качестве метки для намыв (не на ящики). Есть ли возможность сделать это? В моих исходных данных гораздо меньше объектов на аллювию (например, 2-5).

enter image description here

1 Ответ

1 голос
/ 19 февраля 2020

Я бы хотел узнать лучший способ сделать это sh! Вот иллюстрация наименее плохой уловки, с которой я столкнулся. Основные изменения в вашем коде следующие:

  • Эстет c mapping label = response перемещен из вызова ggplot() в (первый) geom_text() слой, так что он не не мешать другим текстовым слоям.
  • Дополнительный geom_text() слой связан со статистикой потока, чтобы пометить каждый графический элемент «поток». Обратите внимание, что таких элементов больше, чем визуально различимо.
  • В новом текстовом слое используется новая эстетика c mapping label = as.character(subject); идентификаторы субъекта (на самом деле когорты) являются числовыми, поэтому если вы не приведете приведение к символу, они будут бессмысленно складываться вместе. (Может быть, это поведение должно контролироваться новым параметром?)
  • Новый текстовый слой использует aestheti c mapping color = survey == "ms153_NSA", чтобы отделить первую временную точку от последних двух, и ручной цвет шкала делает одного невидимым (примечание: NA будет более подходящим, чем "00000000"), а другой черный. Хотя см. Примечание ниже. (Настройка data = subset(vaccinations, survey != "ms_153_NSA") может иметь тот же эффект, но на самом деле это может привести к путанице в метках, поскольку статистика потока разделяет потоки по-разному при удалении первой временной точки.)
  • Метки смещены относительно страты на потоки на nudge_x = -.25.

Примечание: Нечто подобное может привести к желаемому поведению со статуями аллювия, но статистика статов приводит к наложенным меткам в середине момент времени (или любая ось, отличная от первой и последней), которые не всегда совпадают, поскольку потоки расположены по-разному на левой и правой сторонах. В виньетке есть несколько примеров игрушек со стратой и порядком подкладки . Я не думаю, что в настоящее время есть какой-то способ обойти это.

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")

Создано в 2020-02-19 пакетом Представить (v0.3.0)

...