原始数据是类似以下格式存储在EXCEL中,其表示是数据从一个地方流向别外一个地方,将数据别存为CSV后上传到RStudio
因为原始数据中From和To字段是重复的,增加描述项使每个名字都不唯一; 并且去除0值
db<- read.csv(file.choose(),T,na.strings="") #从csv读入文件
data<-db #保存文件
data<-data[data$Weight!=0,] #去除0
data$From<-paste("from_",data$From,sep="") #增加描述
data$To<-paste("to_",data$To,sep="") #增加描述
#################################################################
运用googleVis建立桑基图
library(googleVis)
#demo(googleVis)
BUlist=c("311","312","320","355","360","370","380","848","999")
dataG<-data
dataG$Weight<-round(abs(dataG$LC)/1000,0) #转为k
dataG<-dataG[dataG$Weight!=0,] #去除0
#设置sankey格式
Sankey <- gvisSankey(dataG, from="From", to="To", weight="Weight",
options=list(
height=500,width=750, #高,宽
sankey="{link: {color: { fill: '#d799ae' } },
node: { color: { fill: '#a61d4c' },
label: { color: '#871b47' } }}"))
plot(Sankey) #显示sankey
print(Sankey,file=paste("Sankey.html")) #另存为html
最后输出格式如下
################################################################
运用d2Network建立桑基图
#d3Network需要保持特定格式进行
#Links格式为data.frame,并且一般存为source,target,value
#source,target格式为int,并且一定从0开始
#node格式为data.frame,格式为character
library(d3Network)
d3node<-data.frame(name=unique(c(data$From,data$To)),
stringsAsFactors=FALSE) #读入node名称
d3node$seq=0:(nrow(d3node)-1) #加入序号,用以合并转换
d3link<-data
d3link=merge(d3link,d3node,by.x="From",by.y="name") #合并增加From在node中序号
names(d3link)[5] <- "source"
d3link=merge(d3link,d3node,by.x="To",by.y="name") #合并增加To在node中序号
names(d3link)[6] <- "target"
d3link$value<-round(d3link$Weight/1000,2) #取整值
d3link<-d3link[d3link$value!=0,] #去除0
d3link <- subset(d3link, select=c("source", "target", "value")) #只选取所需列
d3node <- subset(d3node, select=c("name")) #只选取所需列
#生成html文件
d3Sankey(Links = d3link, Nodes = d3node, Source = "source",
Target = "target", Value = "value", NodeID = "name",
fontsize = 12, nodeWidth = 30,file = "TestSankey.html")
最后输出格式如下