我昨天的大部分时间都花在以下问题上,但尚未找到以下问题的解决方案:
我有一个包含分类数据的数据框:比如category1:具有值A和B;另一列category2具有值C,D,F,G; category3的值为H,依此类推...
我想制作一个Sankey图,显示类别1 A中有多少(通过从节点到节点的频带宽度)在C,D,F,G中。这对于分组数据帧中的所有其他组合也是如此
基本上是一棵树,其分支的宽度显示特定分支中有多少个计数。
是否有一种灵活的方法来使它适用于分类DF的大多数分组?
答案 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")
答案 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