我试图通过使用Sankey图来可视化事件序列。 我在不同长度的序列上有一组事件(Event1至Event16)。 序列的步骤由T0,T0-1,T0-2 ... 流的宽度对应于序列的频率速率。
我希望与给定步骤相对应的所有节点都垂直对齐。
通过使用GoogleVis软件包,我成功获得了以下内容:
如您所见,某些事件T0-1,T0-2和T0-3 ...位于最右边,而不是其他与它们时差有关的事件。 似乎是由于这样的事实:没有子节点的节点是不可能的...
对于GoogleVis,您知道一种使节点或不具有子节点的节点分层的方法吗? 如果不是,您是否知道另一个R软件包,该软件包可能允许具有 interactive 图的这些特征?
我的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'}}}")))
谢谢,罗曼。