Sankey地块


桑基图经常被用来说明流量,例如医学中的治疗变化。上面的图说明了哮喘病人的治疗变化。一些小的流量被省略了。

多亏了network3D软件包,做sankey图变得很有趣!通过实现java脚本,他们可以互动。通过实施java脚本,它们可以是互动的。

然而,在使用这个软件包时,也有一些陷阱。最主要的是在不同的图中改变颜色。我们需要通过d3.scaleOrdinal()函数来传递它们,并处理丢失的颜色。你可以使用下面的代码。


colors.list<-c("#FFC312","#C4E538","#12CBC4","#FDA7DF","#ED4C67",
    "#F79F1F","#A3CB38","#1289A7","#D980FA","#B53471",
    "#EE5A24","#009432","#0652DD","#9980FA","#833471",
    "#EA2027","#006266","#1B1464","#5758BB","#6F1E51",
    "#747d8c")
  
  ##为颜色定义21种类型
  types.list<-c("type 0", "type 1", "type 2", "type 3",
                "type 4", "type 5", "type 6", "type 7", "type 8", "type 9",
                "类型10"、"类型11"、"类型12"、"类型13"、"类型14"、"类型15"。
                "类型16"、"类型17"、"类型18"、"类型19"、"类型20")
  
  
  colors <- paste(color.list[which.not.missing], collapse = '", "' )
  types <- paste(types.list[which.not.missing], collapse = '", "' )
  ##在sankeyNetwork函数中把颜色准备成JS形式
  colorJS <- paste('d3.scaleOrdinal() .domain(["', types, '"]) .range(["', colors, '"])')

然后通过sankeyNetwork传给它。

sankeyNetwork(Links = links, Nodes = nodes,
Source = "源", Target = "目标",
值 = "value", NodeID = "name",
fontSize= 12, nodeWidth= 10,
colorScale=colorJS,NodeGroup="组"。
链接组="组")

结合多态模型的方法来创建感兴趣的流量是一个很好的、非常方便的想法(见R中的etm包!)。

library(etm)
  tr.prob.st 0,], c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22"), tra, s= start, t= stop, cens.name = NULL)
  
  #1TP3现在我们计算从开始到停止时间的概率
  probst<-summary(tr.prob.st)
  probst<-do.call(rbind,probst)
  for.plot<-probst[probst$time==stop,] 曲线图
  ##N现在我们可以为sankey plot制作链接了
  links.st<-round(for.plot$P*100,digits=0)

由于结果桑基图是一个小组件,你可以用以下代码来保存它。

p<-sankeyNetwork(Links = links, Nodes = nodes,
                源 = "源", 目标 = "目标"。
                值 = "value", NodeID = "name",
                fontSize= 12, nodeWidth= 10,
                colorScale=my_color,NodeGroup="组"。
                链接组="组")
saveWidget(p, pat, self-contained = F, libdir = "lib")

Selfcontained=F会把它和依赖的java脚本一起保存在库中。你可以选择Self-contained=T选项,然后该脚本将被包含在生成的html文件中。

不幸的是,没有自动获取节点名称旁边的数字的方法。因此,你需要使用一个技巧,用paste()函数将数字粘贴为节点名称的一部分。

network3D包的下一个好处是,它可以很容易地在Shiny中实现,所以你可以有自己的仪表板来创建sankey图。

如果你需要任何帮助,请在评论中给我留言!

玩得开心!

发表评论

电子邮件地址不会被公开。 必填项已用*标注


zh_CNChinese