c語言畫桑基圖,桑基圖繪製軟體

本文目錄一覽:

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-tw/n/193510.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-01 15:01
下一篇 2024-12-01 15:01

相關推薦

  • Python腳本控制其他軟體

    Python作為一種簡單易學、功能強大的腳本語言,具有廣泛的應用領域,在自動化測試、Web開發、數據挖掘等領域都得到了廣泛的應用。其中,Python腳本控制其他軟體也是Python…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • 量化交易軟體哪個好?

    量化交易軟體是為量化交易而設計的工具,能夠用程序化方法對市場數據進行分析和交易決策。那麼,哪個量化交易軟體最好呢?下面從幾個方面進行詳細闡述。 一、交易功能 交易功能是量化交易軟體…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python計算機二級刷題軟體推薦

    Python作為編程語言的代表,已經在計算機學習和開發領域佔據了重要角色。Python計算機二級是國家信息技術應用能力證書的一種,是計算機應用能力的重要評估標準。對於想要獲取Pyt…

    編程 2025-04-29
  • 電腦如何下載ps軟體

    如果您想在電腦上使用Photoshop,那麼您需要下載安裝該軟體。下面是詳細的步驟說明: 一、選擇下載網站 目前市面上有很多下載網站都可以下載到Photoshop軟體,比如Adob…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28

發表回復

登錄後才能評論