❝最近VIP交流群中有朋友询问一张桑基图的画法,目前在R中绘制桑基图的包主要使用「ggsankey」来实现,但是此图由于是交互式因此可见是由「networkD3」包绘制而成,下面就来通过一个小案例介绍如何使用「networkD3」包来绘制一个交互式的桑基图。 ❞
library(tidyverse)
install.packages("networkD3")
library(networkD3)
refresults <- read.csv("result-data.csv")
# 按地区分组进行计算
results <- refresults %>%
group_by(Region) %>%
summarise(Remain = sum(Remain), Leave = sum(Leave)) %>%
pivot_longer(-Region, names_to = "result", values_to = "vote")
regions <- unique(results$Region)
nodes <- data.frame(node = 0:13, name = c(regions, "Leave", "Remain"))
results <- results %>%
inner_join(nodes, by = c("Region" = "name")) %>%
inner_join(nodes, by = c("result" = "name")) %>%
rename(source = node.x, target = node.y, value = vote)
links <- results[, c("source", "target", "value")]
sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
Target = "target", Value = "value", NodeID = "name",
units = "votes")