R Интерактивная диаграмма Санки + Узлы иерархии - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь визуализировать последовательности событий, используя диаграммы Санки. У меня есть набор событий (от 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'}}}")))

Спасибо, Ромен.

...