本文目錄一覽:
R語言1—-桑基(sankey diagram)圖的繪製–sankeyD3
實例分析:
### 安裝與加載包
install.packages(“devtools”)
devtools::install_github(“fbreitwieser/sankeyD3”)
library(sankeyD3)
第一個為鏈接數據框 links(起點、靶點、權重、鏈接的特徵1、鏈接的特徵1…..);
然後根據links構建第二個為節點數據框nodes(起點與靶點、點的特徵1、點的特徵……..)
nodes – data.frame(name=c(as.character(links$source), as.character(links$target)) %% unique())
然後基於nodes數據框構建links中節點的唯一標識符ID,而非根據節點的name
links$IDsource – match(links$source, nodes$name)-1
links$IDtarget – match(links$target, nodes$name)-1
sankeyNetwork( Links = links, Nodes = nodes, Source = “IDsource”, Target = “IDtarget”,
Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,
height=300,width=300,colourScale=JS(“d3.scaleOrdinal(d3.schemeCategory10);”),
numberFormat=”.0f”,fontSize = 8)
nodes$color-sample(c(“red”,”orange”,”blue”,”green”),nrow(nodes),replace=T) #在這裡進行隨機自定義顏色,當然也可以按照自己的需求進行設置
sankeyNetwork(Links = links, Nodes = nodes,Source = “IDsource”, Target = “IDtarget”,
Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,
height=300,width=300,numberFormat=”.0f”,fontSize = 8, NodeColor = “color” )
也可以根據節點自定義的分類對節點進行顏色的繪製
nodes$group-rep(“水果”,nrow(nodes))
nodes$group[nodes$name %in% c(“上海”,”深圳”,”北京”,”南京”)]-“城市”
nodes$group[nodes$name %in% c(“律師”,”老師”,”白領”,”公務員”,”記者”,”化妝師”)]-“職業”
sankeyNetwork(Links = links, Nodes = nodes,Source = “IDsource”, Target = “IDtarget”,
Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,
numberFormat=”.0f”,fontSize = 8,height=300,width=300,
NodeGroup=”group”,colourScale=JS(“d3.scaleOrdinal(d3.schemeCategory10);”) )
對於緞帶的顏色設置同理也可以對其進行分組顏色設置(這裡按照其統計量進行分組設置,當然也可以按照其他進行分組)
links$group-rep(“A”,nrow(links))
links$group[links$weight500 links$weight=100]-“B”
links$group[links$weight100]-“C”
sankeyNetwork(Links = links, Nodes = nodes,Source = “IDsource”, Target = “IDtarget”,
Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,
numberFormat=”.0f”,fontSize = 8,height=300,width=300,
NodeGroup=”group”, LinkGroup = “group”,
colourScale=JS(“d3.scaleOrdinal(d3.schemeCategory10);”))
有時候想要緞帶根據其寬度進行一定透明度的變化,可以使用 linkType=”path1″參數進行設置
install.packages(“webshot”)
library(webshot)
if(!is_phantomjs_installed()){
install_phantomjs()
}
library(webshot)
p-sankeyNetwork(Links = links, Nodes = nodes,Source = “IDsource”, Target = “IDtarget”,
Value = “weight”, NodeID = “name”,nodeWidth =10,units = ‘TWh’,
numberFormat=”.0f”,fontSize = 8,height=300,width=300,
NodeGroup=”group”,LinkGroup = “group”,
colourScale=JS(“d3.scaleOrdinal(d3.schemeCategory10);”))
### 將結果存儲PDF
saveNetwork(p,”sankey.html”)
webshot(“sankey.html” , “sankey.pdf”)
在線繪製桑基圖
現在許多文章都利用桑基圖來展示ceRNA網絡、功能富集等圖,也有很多R包專門可以用來畫桑基圖,不過我在這裡發現ggplot2包非常強大,也可以畫桑基圖,現在來給大家介紹一下
首先加載需要的R包
###########加載
library(ggplot2)
library(ggalluvial)
library(RColorBrewer)
這裡以miRNA-mRNA的關係為例,數據格式如下
##########整合
miRNA_mRNA$Freq=1#定義縱坐標,一般默認為1
miRNA_mRNA_long- to_lodes_form(miRNA_mRNA,
axes = 1:2,#將miRNA和mRNA分別編號
id = “Cohort”) #改為長數據便於畫圖
下面就可以開始畫桑基圖了,主要需要ggplot的geom_flow和geom_stratum兩個函數
geom_flow–畫流動圖
我們看一下只畫geom_flow的效果
###########geom_flow
ggplot(miRNA_mRNA_long,
aes(x =factor(x,level = c(“miRNA”,”SYMBOL”)),y=Freq,stratum = stratum, alluvium = Cohort,fill = stratum, label =stratum)) +
geom_flow( width = 1/3)+#畫流動圖
geom_text(stat =”stratum” , size =3) +#添加名字
scale_x_discrete(limits = c() )+#去掉橫坐標軸
theme_bw()+#定義主題
theme(legend.position = “none”,
axis.title = element_blank(),
axis.text.y= element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank())+
scale_fill_manual(values = colorRampPalette(brewer.pal(8, “Accent”))(20))#定義顏色
geom_flow–畫流動圖
我們看一下只畫geom_stratum的效果
###########geom_stratum
ggplot(miRNA_mRNA_long,
aes(x =factor(x,level = c(“miRNA”,”SYMBOL”)),y=Freq,stratum = stratum, alluvium = Cohort,fill = stratum, label =stratum)) +
geom_stratum( width = 1/3,linetype=1,size=0.5,alpha =0.5,color = “black”) +#畫衝擊圖
geom_text(stat =”stratum” , size =3) +#添加名字
scale_x_discrete(limits = c() )+#去掉橫坐標軸
theme_bw()+#定義主題
theme(legend.position = “none”,
axis.title = element_blank(),
axis.text.y= element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank())+
scale_fill_manual(values = colorRampPalette(brewer.pal(8, “Accent”))(20))#定義顏色
整合後
###########繪圖
ggplot(miRNA_mRNA_long,
aes(x =factor(x,level = c(“miRNA”,”SYMBOL”)),y=Freq,stratum = stratum, alluvium = Cohort,fill = stratum, label =stratum)) +
geom_flow( width = 1/3)+#畫流動圖
geom_stratum( width = 1/3,linetype=1,size=0.5,alpha =0.5,color = “black”) +#畫衝擊圖
geom_text(stat =”stratum” , size =3) +#添加名字
scale_x_discrete(limits = c() )+#去掉橫坐標軸
theme_bw()+#定義主題
theme(legend.position = “none”,
axis.title = element_blank(),
axis.text.y= element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank())+#去掉邊界線
scale_fill_manual(values = colorRampPalette(brewer.pal(8, “Accent”))(20))#定義顏色
改變邊框模式linetype
###########繪圖
ggplot(miRNA_mRNA_long,
aes(x =factor(x,level = c(“miRNA”,”SYMBOL”)),y=Freq,stratum = stratum, alluvium = Cohort,fill = stratum, label =stratum)) +
geom_flow( width = 1/3)+#畫流動圖
geom_stratum( width = 1/3,linetype=0,size=0.5,alpha =0.5,color = “black”) +#畫衝擊圖
geom_text(stat =”stratum” , size =3) +#添加名字
scale_x_discrete(limits = c() )+#去掉橫坐標軸
theme_bw()+#定義主題
theme(legend.position = “none”,
axis.title = element_blank(),
axis.text.y= element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank())+#去掉邊界線
scale_fill_manual(values = colorRampPalette(brewer.pal(8, “Accent”))(20))#定義顏色
echarts圖表——桑基圖&路徑圖
桑基圖(Sankey diagram),即桑基能量分流圖,也叫桑基能量平衡圖。它是一種特定類型的流程圖,延伸的分支的寬度對應數據流量的大小,通常應用於能源、材料成分、金融等數據的可視化分析。
桑基圖最明顯的特徵就是,始末端的分支寬度總和相等,即所有主支寬度的總和應與所有分出去的分支寬度的總和相等,保持能量的平衡。
echarts中的路徑圖不是指學習路徑圖這種,而是基於地圖。個人感覺更偏向道路規劃圖
–
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/193510.html