Я пытаюсь визуализировать последовательности событий, используя диаграммы Санки.
У меня есть набор событий (от Event1 до Event16) на последовательности различной длины.
Шаги последовательностей отмечены T0, T0 - 1, T0 - 2 ...
Ширина потока соответствует частоте последовательностей.
Я бы хотел, чтобы все узлы, соответствующие данному шагу, были выровнены по вертикали
С помощью пакета GoogleVis мне удается получить следующее:
Санки с GoogleVis
Как вы можете видеть, некоторые события T0-1, T0-2 и T0-3 ... находятся далеко справа, а не с другими из их временного шага.
Кажется, это связано с тем, что невозможно иметь узлы без детей ...
Знаете ли вы способ иерархии узлов или / и узлов без дочерних элементов для GoogleVis?
Если нет, то знаете ли вы другой пакет R, который может позволить иметь эти характеристики для интерактивных сюжетов?
Мой код R ниже. Основной переменной, содержащей последовательности, является список списка, см. Рисунок.
Данные, содержащие последовательности
Мой код:
# Package
library(googleVis)
library(dplyr)
library(reshape2)
library(tidyverse)
# Load
load("SeqCh")
# Loop -------------------------------------------------------------
# Inits
From = c()
To = c()
Freq = c()
Target = SeqCh
# Get maximum length of sequence
maxls = 0
for (kk in 1:length(Target)){
temp = length(Target[[kk]])
if (temp > maxls){
maxls = temp
}
}
# Loop on length of sequences
for (zz in 2:maxls){
# Prefix to add to manage same event repeated
if (zz == 2){
SufixFrom = "(T0)"
SufixTo = "(T0 - 1)"
} else {
SufixFrom = paste("(T0 - ", as.character(zz-2), ")", sep = "")
SufixTo = paste("(T0 - ", as.character(zz-1), ")", sep = "")
}
# Message
cat("\n")
print(paste(" Processing events from ", SufixFrom, " to ", SufixTo))
# Loop on Target
ind = lapply(Target, function(x) length(x) == zz)
TargetSub = Target[unlist(ind)]
FreqSub = Support[unlist(ind)]
for (jj in 1:length(TargetSub)){
temp = TargetSub[[jj]]
TempFrom = paste(temp[zz-1], SufixFrom, sep = " ")
TempTo = paste(temp[zz], SufixTo, sep = " ")
From = c(From, TempFrom)
To = c(To, TempTo)
Freq = c(Freq, FreqSub[jj])
}
} # end for loop on length of sequences
# All in same variable
Flows = data.frame("From" = From, "To" = To, "Occurence_Frequency" = Freq, stringsAsFactors = FALSE)
# Plot --------------------------------------------------------------------
plot(gvisSankey(Flows, from='From', to='To', weight="Occurence_Frequency",
options=list(height=900, width=1800, sankey="{link:{color:{fill:'lightblue'}}}")))
Спасибо, Ромен.