我正在尝试在R中生成一个sankey diagram,它也被称为河流图。我看过这个问题Sankey Diagrams in R?,其中列出了产生sankey图的各种软件包。由于我有输入数据,并知道不同的工具/软件包,我可以制作这样的图,但我的euquestion是:如何准备输入数据?
让我们假设我们想要展示用户如何在10天内在各种状态之间迁移,并具有如下所示的开始数据集:
data.frame(userID = 1:100,
day1_state = sample(letters[1:8], replace = TRUE, size = 100),
day2_state = sample(letters[1:8], replace = TRUE, size = 100),
day3_state = sample(letters[1:8], replace = TRUE, size = 100),
day4_state = sample(letters[1:8], replace = TRUE, size = 100),
day5_state = sample(letters[1:8], replace = TRUE, size = 100),
day6_state = sample(letters[1:8], replace = TRUE, size = 100),
day7_state = sample(letters[1:8], replace = TRUE, size = 100),
day8_state = sample(letters[1:8], replace = TRUE, size = 100),
day9_state = sample(letters[1:8], replace = TRUE, size = 100),
day10_state = sample(letters[1:8], replace = TRUE, size = 100)
) -> dt
字符串
现在,如果一个人想要用networkD3
包创建一个sankey图,那么应该如何将这个dt
数据.
这样我们就有了类似于本例输入
library(networkD3)
URL <- paste0(
"https://cdn.rawgit.com/christophergandrud/networkD3/",
"master/JSONdata/energy.json")
Energy <- jsonlite::fromJSON(URL)
# Plot
sankeyNetwork(Links = Energy$links, Nodes = Energy$nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
units = "TWh", fontSize = 12, nodeWidth = 30)
型
编辑
我发现了这样的脚本,它在其他情况下准备数据并复制它,所以我认为它现在可能已经关闭:
https://github.com/mi2-warsaw/JakOniGlosowali/blob/master/sankey/sankey.R
3条答案
按热度按时间jei2mxaa1#
我发现了这样的脚本,它在其他情况下准备数据并复制它,所以我认为它现在可能已经关闭:
https://github.com/mi2-warsaw/JakOniGlosowali/blob/master/sankey/sankey.R
然后此代码为问题中提到的数据生成这样的sankey图。
字符串
oknrviil2#
I asked a similar question while ago.我想我最好在这里发布它如何使用
tidyverse
魔术来完成。字符串
以下是数据
dt_new
的外观型
现在绘制桑基图:
型
下面是输出
oyxsuwqo3#
七年了,但仍然值得更新
下面是我写的一些东西,它可以将宽数据转换为sankey兼容。
任何使用它的人都需要做一点编辑,函数中的sankey_pairs列表需要编辑,以便在数据中具有顺序/链式的列对。
这个函数可以创建一个完整的图表,但任何人都可以从中提取他们需要的内容。
字符串