Аллювиальный участок в R: как разнести пласты?

Задний план

Я работал над созданием наносного участка (типа диаграммы Санки), используя и пакет ggalluvial для визуализации разницы частот во времени и их происхождения.

В качестве примера я создал простой набор данных из 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 вы могли бы сделать это:

Проблема с наносными участками заключается в том, что вы не получаете разделения между «жилами» на пласте.

      
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)

Другие вопросы по тегам