R交互式Sankey图+分层节点

时间:2018-07-05 17:14:06

标签: r plot sequence sankey-diagram

我试图通过使用Sankey图来可视化事件序列。 我在不同长度的序列上有一组事件(Event1至Event16)。 序列的步骤由T0,T0-1,T0-2 ... 流的宽度对应于序列的频率速率。

我希望与给定步骤相对应的所有节点都垂直对齐。

通过使用GoogleVis软件包,我成功获得了以下内容:

Sankey with GoogleVis

如您所见,某些事件T0-1,T0-2和T0-3 ...位于最右边,而不是其他与它们时差有关的事件。 似乎是由于这样的事实:没有子节点的节点是不可能的...

对于GoogleVis,您知道一种使节点或不具有子节点的节点分层的方法吗? 如果不是,您是否知道另一个R软件包,该软件包可能允许具有 interactive 图的这些特征?

我的R代码在下面。包含序列的主要变量是列表列表,请参见图片。

Data containing sequences

我的代码:

# 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'}}}")))

谢谢,罗曼。

0 个答案:

没有答案