這篇文章主要介紹“R語(yǔ)言怎么實(shí)現(xiàn)桑基圖”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“R語(yǔ)言怎么實(shí)現(xiàn)?;鶊D”文章能幫助大家解決問(wèn)題。
創(chuàng)新互聯(lián)建站于2013年成立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元平輿做網(wǎng)站,已為上家服務(wù),為平輿各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
百度百科給了?;鶊D相對(duì)完善的解釋?zhuān)?/p>
桑基圖(Sankey diagram),即?;芰糠至鲌D,也叫?;芰科胶鈭D。它是一種特定類(lèi)型的流程圖,圖中延伸的分支的寬度對(duì)應(yīng)數(shù)據(jù)流量的大小,通常應(yīng)用于能源、材料成分、金融等數(shù)據(jù)的可視化分析。因1898年Matthew Henry Phineas Riall Sankey繪制的“蒸汽機(jī)的能源效率圖”而聞名,此后便以其名字命名為“?;鶊D”。
因1898年Matthew Henry Phineas Riall Sankey繪制的“蒸汽機(jī)的能源效率圖”而聞名,此后便以其名字命名為“?;鶊D”。
?;鶊D最明顯的特征就是,始末端的分支寬度總和相等,即所有主支寬度的總和應(yīng)與所有分出去的分支寬度的總和相等,保持能量的平衡。
現(xiàn)如今的可視化軟件行業(yè)如此發(fā)達(dá),制作此類(lèi)桑基圖已絕非難事,從最高端的JS庫(kù)(D3、Ecgarts、highlight)到主流的數(shù)據(jù)科學(xué)編程工具(R、Python等)亦或者人人都能上手的自助式BI工具(PowerBI、Tableau等)都可以勝任此項(xiàng)工作。
本文將著重分享使用R語(yǔ)言中的d3network工具包以及PowerBI可視化工具來(lái)制作?;鶊D的大致過(guò)程(Tableau的?;鶊D還是太繁瑣,這里不再展示,感興趣可以自己探索)。
R中有兩個(gè)包有現(xiàn)成的桑基圖函數(shù):
Networkd3、d3Network,包名大同小異,而且函數(shù)的參數(shù)都是一樣的,很懷疑是不是同一批人搞的。
?;鶊D的數(shù)據(jù)結(jié)構(gòu)很簡(jiǎn)單,只有三列數(shù)據(jù)信息:
起點(diǎn):
終點(diǎn):
權(quán)重:
雖然只有三列數(shù)據(jù),但是桑基圖可以做出多級(jí)節(jié)點(diǎn),在數(shù)據(jù)整合上,我們需要事前現(xiàn)將所有節(jié)點(diǎn)對(duì)應(yīng)的起點(diǎn)、終點(diǎn)和權(quán)重值都順序的縱向合并為三列字段。
第一個(gè)圖是我們要呈現(xiàn)的原始數(shù)據(jù),這樣看來(lái)有兩組對(duì)應(yīng)關(guān)系,即大區(qū)對(duì)應(yīng)地區(qū)、地區(qū)對(duì)應(yīng)省份,我們?nèi)绻尸F(xiàn)這兩組信息,只篩選出大區(qū)與地區(qū)對(duì)應(yīng)關(guān)系及其權(quán)重值、地區(qū)與省份對(duì)應(yīng)關(guān)系及其權(quán)重值,并將兩組三變量數(shù)據(jù)表進(jìn)行列對(duì)齊合并。(說(shuō)的有點(diǎn)繞了,其實(shí)就是圖表上有多少節(jié)點(diǎn)對(duì),那么數(shù)據(jù)就有多少個(gè)三變量觀測(cè)值)。
以下是R語(yǔ)言代碼的實(shí)現(xiàn)過(guò)程:
library(Networkd3)
library("d3Network")
library(xlsx)
setwd("D:/R/File/")
Sankey<-read.xlsx("D:/R/File/SankeyData.xlsx",sheetName="Data",header=T,encoding='UTF-8',stringsAsFactors=FALSE,check.names=FALSE)
Sankeylinks<-Sankey
Sankeynodes<-data.frame(name=unique(c(Sankeylinks$Source,Sankeylinks$Target)),stringsAsFactors=FALSE)
Sankeynodes$index<-0:(nrow(Sankeynodes) - 1)
Sankeylinks<-merge(Sankeylinks,Sankeynodes,by.x="Source",by.y="name")
Sankeylinks<-merge(Sankeylinks,Sankeynodes,by.x="Target",by.y="name")
Sankeydata<-Sankeylinks[,c(4,5,3)];names(Sankeydata)<-c("Source","Target","Value")
Sankeyname<-Sankeynodes[,1,drop=FALSE]
使用d3Network包中的?;鶊D函數(shù)實(shí)現(xiàn):
d3Sankey(Links=Sankeydata,Nodes=Sankeyname,Source="Source",Target="Target",Value="Value",NodeID="name",
fontsize=12,nodeWidth=30,file="TestSankey.html")
遺憾的是該包對(duì)中文支持不夠友好~
#------------------------------------------
使用Networkd3包里面的?;鶊D函數(shù)實(shí)現(xiàn):
sankeyNetwork(Links=Sankeydata,Nodes=Sankeyname, Source ="Source",
Target = "Target", Value = "Value", NodeID = "name",
units = "TWh", fontSize = 12, nodeWidth = 30)
這次出來(lái)的結(jié)果還是挺滿意的:
以上兩種方式做出來(lái)的動(dòng)態(tài)圖表(調(diào)用了D3的在線圖形庫(kù),格式是html格式的,如果你需要將HTML嵌入PPT中使用,那么本公眾號(hào)早前曾經(jīng)推送過(guò)一篇此類(lèi)文章,講解如何在PPT中嵌入HTML對(duì)象)。
將html格式動(dòng)態(tài)圖表網(wǎng)頁(yè)嵌入ppt中
PowerBI版講解:
接下來(lái)講解如何在PowerBI中實(shí)現(xiàn)以上?;鶊D效果,因?yàn)楦膱D表并未包含在PowerBI的內(nèi)置基礎(chǔ)圖表庫(kù)中,所以我們需要在他的在線社區(qū)中下載該圖表的可視化插件。
https://store.office.com/en-us/appshome.aspx?productgroup=PowerBI
關(guān)于如何下載PowerBI圖形可視化插件,如何導(dǎo)入、加載和使用,此前的另一篇文章中也介紹的很詳細(xì)。
當(dāng)PowerBI遇到R語(yǔ)言
然后導(dǎo)入你的?;鶊D數(shù)據(jù)源:
拖入對(duì)應(yīng)字段:(仍然是三個(gè)字段,起點(diǎn),終點(diǎn),權(quán)重)
保存本地文件,并發(fā)布到PowerBI的云空間:
如果你還沒(méi)有申請(qǐng)PowerBI的賬戶,那么最好去他的平臺(tái)申請(qǐng)一個(gè)(提示需要使用教育郵箱或者工作郵箱,即.com\.edu結(jié)尾的)。
發(fā)布成功之后,你的PowerBI控件中就存在此圖表對(duì)象,以后你更新本地的那個(gè)PowerBI文件的時(shí)候,只需點(diǎn)擊發(fā)布,空間中的對(duì)象也會(huì)同步更新。
然后打開(kāi)你的PPT(需13及16版以上才可以)的應(yīng)用商店內(nèi)找到PowerBIFile插件。
點(diǎn)擊添加,輸入之前申請(qǐng)的賬號(hào)密碼,就會(huì)出現(xiàn)你的已存儲(chǔ)的儀表盤(pán)對(duì)象,點(diǎn)擊對(duì)應(yīng)的?;鶊D對(duì)象,就可以完成導(dǎo)入。
導(dǎo)入后的?;鶊D無(wú)論是在PPT的編輯狀態(tài)還是PPT的放映狀態(tài)都可以保留所有的動(dòng)態(tài)效果。(這就是微軟的PowerBI與office平臺(tái)對(duì)接后帶來(lái)的強(qiáng)大優(yōu)勢(shì),非常適合作為大屏幕交互演示來(lái)蹭亮點(diǎn))
關(guān)于“R語(yǔ)言怎么實(shí)現(xiàn)?;鶊D”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。