【问题标题】:How to make a googleVis multiple Sankey from a data.frame?如何从 data.frame 制作 googleVis 多个 Sankey?
【发布时间】:2017-08-04 15:21:31
【问题描述】:

目标

我的目标是使用 googleVis 包在 R 中制作多个 Sankey。输出应该类似于:

数据

我在 R 中创建了一些虚拟数据:

set.seed(1)

source <- sample(c("North","South","East","West"),100,replace=T)
mid <- sample(c("North ","South ","East ","West "),100,replace=T)
destination <- sample(c("North","South","East","West"),100,replace=T) # N.B. It is important to have a space after the second set of destinations to avoid a cycle
dummy <- rep(1,100) # For aggregation

dat <- data.frame(source,mid,destination,dummy)
aggdat <- aggregate(dummy~source+mid+destination,dat,sum)

到目前为止我已经尝试过什么

如果我只有一个源和目标,但没有中间点,我可以用 2 个变量构建一个 Sankey:

aggdat <- aggregate(dummy~source+destination,dat,sum)

library(googleVis)

p <- gvisSankey(aggdat,from="source",to="destination",weight="dummy")
plot(p)

代码产生这个:

问题

如何修改

p <- gvisSankey(aggdat,from="source",to="destination",weight="dummy")

也接受mid 变量?

【问题讨论】:

    标签: r googlevis sankey-diagram


    【解决方案1】:

    函数gvisSankey 直接接受中间层。这些级别必须在基础数据中进行编码。

     source <- sample(c("NorthSrc", "SouthSrc", "EastSrc", "WestSrc"), 100, replace=T)
     mid <- sample(c("NorthMid", "SouthMid", "EastMid", "WestMid"), 100, replace=T)
     destination <- sample(c("NorthDes", "SouthDes", "EastDes", "WestDes"), 100, replace=T) 
     dummy <- rep(1,100) # For aggregation
    

    现在,我们将重塑原始数据:

     library(dplyr)
    
     datSM <- dat %>%
      group_by(source, mid) %>%
      summarise(toMid = sum(dummy) ) %>%
      ungroup()
    

    数据框datSM 汇总了从源到中的单元数。

      datMD <- dat %>%
       group_by(mid, destination) %>%
       summarise(toDes = sum(dummy) ) %>%
       ungroup()
    

    数据框datMD 汇总了从中间到目的地的单位数。该数据框将被添加到最终数据框中。数据框必须是ungroup 并且具有相同的colnames

      colnames(datSM) <- colnames(datMD) <- c("From", "To", "Dummy")
    

    由于datMD作为最后一个附加,gvisSankey会自动识别中间步骤。

      datVis <- rbind(datSM, datMD)
    
      p <- gvisSankey(datVis, from="From", to="To", weight="dummy")
      plot(p)
    

    剧情如下:

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2022-01-16
      • 1970-01-01
      • 2013-05-07
      • 2020-07-31
      • 2015-06-12
      相关资源
      最近更新 更多