转自 R桑基图 - wenyusuran的专栏 - CSDN博客 https://blog.csdn.net/wenyusuran/article/details/80674577
桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机的能源效率图”而闻名,此后便以其名字命名为“桑基图”。桑基图最明显的特征就是,始末端的分支宽度总和相等,即所有主支宽度的总和应与所有分出去的分支宽度的总和相等,保持能量的平衡。
制作工具就有:JS库(D3、Ecgarts、highlight)、R、Python、PowerBI、Tableau、BDP个人版。
在R里,有三个包可以绘制桑基图:
library(riverplot)
library("d3Network")
library(Networkd3)
然而第一个包特色过于鲜明,第二个包对中文不太友好,所以个人偏向于第三个包。
---------------------
作者:文宇肃然
来源:CSDN
原文:https://blog.csdn.net/wenyusuran/article/details/80674577
版权声明:本文为博主原创文章,转载请附上博文链接!
library(networkD3)
setwd('D:/rscript/')
#a=read.csv("m.csv")#a为合并之后的数据
a <- read.csv('1.csv',header=TRUE,fileEncoding='utf-8')
a$s = as.character(a$s) # 导入数据的起点终点是factor类型,需要将其转为chr,否则之后unique的是因子水平,不能进行合并。
a$t = as.character(a$t)
Sankeylinks<-a
Sankeynodes<-data.frame(name=unique(c(Sankeylinks$s,Sankeylinks$t)))
Sankeynodes$index<-0:(nrow(Sankeynodes) - 1)
Sankeylinks<-merge(Sankeylinks,Sankeynodes,by.x="s",by.y="name")
Sankeylinks<-merge(Sankeylinks,Sankeynodes,by.x="t",by.y="name")
Sankeydata<-Sankeylinks[,c(4,5,3)];
names(Sankeydata)<-c("Source","Target","Value")
Sankeyname<-Sankeynodes[,1,drop=FALSE]
sankeyNetwork(Links=Sankeydata,Nodes=Sankeyname, Source ="Source",
Target = "Target", Value = "Value", NodeID = "name",
fontSize = 12, nodeWidth = 30)