R从分组数据框到Sankey图

时间:2018-10-19 06:13:03

标签: r dataframe tree grouping sankey-diagram

我昨天的大部分时间都花在以下问题上,但尚未找到以下问题的解决方案:

我有一个包含分类数据的数据框:比如category1:具有值A和B;另一列category2具有值C,D,F,G; category3的值为H,依此类推...

我想制作一个Sankey图,显示类别1 A中有多少(通过从节点到节点的频带宽度)在C,D,F,G中。这对于分组数据帧中的所有其他组合也是如此

基本上是一棵树,其分支的宽度显示特定分支中有多少个计数。

是否有一种灵活的方法来使它适用于分类DF的大多数分组?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用漂亮的ggalluvial软件包:

library(ggalluvial)
library(ggplot2)

# some fake data
data <- data.frame(column1 = c('A','A','A','B','B','B')
                   ,column2 = c('C','D','E','C','D','E')
                   , column3 = c('F','G','H','I','J','K')
                               )

# add a costant as frequencies: if each "flow" count as 1, you can do this
data$freq <- 1

# here the plot
ggplot(data,
       aes(y = freq, axis1 = column1, axis2 = column2, axis3 = column3)) +
  geom_alluvium(aes(), width = 1/12) +
  geom_stratum(width = 1/12, fill = "black", color = "blue") +
  geom_label(stat = "stratum", label.strata = TRUE)  +
  scale_fill_brewer(type = "qual", palette = "Set1") +
  ggtitle("nice sankey")

enter image description here

答案 1 :(得分:0)

如果您愿意将数据重新排列到节点列表和边缘列表中,则可以使用带有@IBAction func completingSignUp(_ segue: UIStoryboardSegue) { let completedAlert = UIAlertController(title: "Completing", message: "Congratulations.", preferredStyle: .alert) let ok = UIAlertAction(title: "OK", style: .default, handler: nil) completedAlert.addAction(ok) self.present(completedAlert, animated: true) } 包的D3 javascript库。这是一个带有伪数据的示例(请注意,要使用此库,您需要有一个以0开头的id列。

networkD3