У меня есть этот кадр данных с точками времени (a, b и c) , метками (l1, l2, l3) и частотами, которые распределены по точкам времени и метками.Я хочу создать диаграмму Санки с пакетом ggalluvial в R. Вот некоторый код:
library(tidyverse)
library(forcats)
library(ggalluvial)
library(magrittr)
plotAlluvial <- function(.df,name=freq) {
y_name <- enquo(name)
ggplot(.df,
aes(
x = tp,
stratum = lbl,
alluvium = id,
label=lbl,
fill = lbl,
y=!!y_name
)
) +
geom_stratum() +
geom_flow(stat = "flow", color = "darkgray") +
geom_text(stat = "stratum") +
scale_fill_brewer(type = "qual", palette = "Set2")
}
x1=c(6,0,0,5,5,4,2,0,3)
x2=c(5,5,3,0,0,5,0,7,0)
df=data_frame(tp1=rep(c('a','b'),each=9),
lbl1=c(rep(c('l1','l2','l3'),2,each=3)),
tp2=rep(c('b','c'),each=9),
lbl2=c(rep(c('l1','l2','l3'),6)),
freq=c(x1,x2)
)
df2=df %>%
mutate(id=row_number()) %>%
unite(un1,c(tp1,lbl1)) %>%
unite(un2,c(tp2,lbl2)) %>%
tidyr::gather(key,value,-c(freq,id)) %>%
separate('value',c('tp','lbl'))
df2.left= df2 %>%
dplyr::filter(!(key=='un1' & tp=='b'))
df2.right= df2 %>%
dplyr::filter(!(key=='un2' & tp=='b'))
Я могу построить левую сторону и построить правую сторону нужной мне диаграммы:
plotAlluvial(df2.left)
plotAlluvial(df2.right)
![enter image description here](https://i.stack.imgur.com/H80cj.png)
Но если я пытаюсь построить левую и правую стороны одновременно, я получаю этот график:
plotAlluvial(df2)
![enter image description here](https://i.stack.imgur.com/XPdjM.png)
Когда я использую код выше, график графика имеет слишком много частот в момент времени b.Уровень должен быть таким же высоким, как и у двух других слоев, поэтому он должен иметь высоту 25. Что я делаю не так?Как я могу создать диаграмму, которая объединит первые два графика?
РЕДАКТИРОВАТЬ:
После комментария я добавил пропорцию переменной частоты.Теперь слой b имеет правильную высоту, но входящий и исходящий потоки все еще занимают только 50% каждого условия в момент времени b.
df2 %<>% group_by(tp) %>% mutate(prop = freq / sum(freq)) %>%
ungroup()
plotAlluvial(df2,prop)
![enter image description here](https://i.stack.imgur.com/ZYTca.png)