Аллювиальный участок в R: как разнести пласты?
Задний план
Я работал над созданием наносного участка (типа диаграммы Санки), используя
В качестве примера я создал простой набор данных из 100 воображаемых пациентов, прошедших скрининг на COVID-19. Исходно все пациенты отрицательны на COVID-19. Скажем, через 1 неделю все пациенты проходят тестирование снова: теперь 30 пациентов положительны, 65 - отрицательны, а 5 имеют неубедительный результат. Еще через неделю 30 положительных пациентов остаются положительными, 10 пациентов переходят от отрицательного к положительному, а остальные - отрицательными.
data <- data.frame(analysis = as.factor(rep(c("time0", "time1", "time2"), each = 4)),
freq = rep(c(30, 10, 55, 5), 3),
track = rep(1:4, 3),
response = c("neg","neg","neg","neg", "pos", "neg", "neg", "inconc", "pos", "pos", "neg", "neg"))
# analysis freq track response
#1 time0 30 1 neg
#2 time0 10 2 neg
#3 time0 55 3 neg
#4 time0 5 4 neg
#5 time1 30 1 pos
#6 time1 10 2 neg
#7 time1 55 3 neg
#8 time1 5 4 inconc
#9 time2 30 1 pos
#10 time2 10 2 pos
#11 time2 55 3 neg
#12 time2 5 4 neg
Цель
Цель состоит в том, чтобы создать аллювиальный график, чтобы визуализировать «следы» (т. Е. Намыв) этих пациентов с течением времени и, таким образом, визуализировать происхождение результатов через две недели. Что-то вроде:
Пытаться
Мне удалось составить основную часть фигуры:
library(tidyverse)
library(ggalluvial)
ggplot(data, aes(x = analysis, stratum = response, alluvium = track, y = freq, fill = response), col = "black") +
geom_flow(stat = "alluvium") +
geom_stratum(alpha = .5) +
scale_fill_manual(values = c("grey", "green", "red"))
Вопрос
Однако я не могу четко отличить слои друг от друга. Теперь все они прилегают друг к другу, что приводит к полностью «заполненному» прямоугольнику.
Как распределить пласты / наносы на аллювиальном участке с помощью
2 ответа
Автор пакета ggalluvial определяет аллювиальные участки как:
Вы, вероятно, захотите сделать сюжет санки, разумный пакет: ggsankey
С участием
ggalluvial
вы могли бы сделать это:
Проблема с наносными участками заключается в том, что вы не получаете разделения между «жилами» на пласте.
library(ggplot2)
library(ggalluvial)
data$track <- factor(data$track)
ggplot(data, aes(x = analysis, y = freq, stratum = response, alluvium = track)) +
geom_flow(aes(fill = track), stat = "alluvium") +
geom_lode(aes(fill = response))+
geom_text(stat = "stratum", aes(label = response)) +
scale_fill_manual("Track",
breaks = c("1", "2", "3", "4", "neg", "pos", "inconc" ),
labels = c("1", "2", "3", "4", "", "", ""),
values = c("grey15", "grey40", "grey65", "grey90", "red", "green", "orange"))+
guides(fill = guide_legend(override.aes = list(alpha = c(`1` = 1, `2` = 1, `3` = 1, `4` = 1,
neg = 0, pos = 0, inconc = 0))))+
theme_minimal()
Создано 2021-04-18 пакетом REPEX (v2.0.0)