Я бы хотел узнать лучший способ сделать это 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)