日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Cytoscape可视化物种分类树结构

發(fā)布時(shí)間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cytoscape可视化物种分类树结构 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Cytoscape可視化物種分類(lèi)樹(shù)結(jié)構(gòu)

前兩天偶然看到了這樣一張圖,聽(tīng)群友說(shuō)這是Cytoscape調(diào)出來(lái)的效果,就想試一試。

折騰一番后,發(fā)現(xiàn)這個(gè)圖的工作量貌似蠻大的。因此本篇就只是概括了一下大致的過(guò)程,包括如何準(zhǔn)備輸入數(shù)據(jù),以及在Cytoscape可視化時(shí)大致上要點(diǎn)擊哪些按鈕等,并未仔細(xì)琢磨成品圖。所以,下文略顯粗糙,大家有興趣就看吧……

這其實(shí)是個(gè)物種分類(lèi)樹(shù),代表的微生物分類(lèi)。從高級(jí)分類(lèi)水平(界,細(xì)菌和真菌)的根節(jié)點(diǎn)開(kāi)始,依次往低分類(lèi)層級(jí)(門(mén)綱目科屬等)延伸,逐漸形成分支,末端節(jié)點(diǎn)應(yīng)該是OTU或者種水平。因此,分支呈簇狀展示,分支的顏色主要按門(mén)水平著色,將衍生自同一類(lèi)門(mén)的微生物分支賦值相同的顏色。節(jié)點(diǎn)的大小應(yīng)該對(duì)應(yīng)了微生物的豐度,而節(jié)點(diǎn)的顏色主要有兩種,猜測(cè)紅色代表了一些重要的微生物,白色是不重要的。圖中文字部分則標(biāo)識(shí)了主要的微生物門(mén)所含的節(jié)點(diǎn)數(shù)量,以及這些微生物的總豐度占比。

好吧,其實(shí)白魚(yú)同學(xué)并不知道這是來(lái)自哪篇文章的插圖,不清楚它的任何細(xì)節(jié),包括其具體的指代信息以及作者試圖表達(dá)的意義等,上一段文字純粹是看圖瞎猜的……又懶得問(wèn)其來(lái)源,那就按照這種理解去模仿吧,反正只是隨手畫(huà)個(gè)圖嘛,不要在意那么多細(xì)節(jié)。

??

準(zhǔn)備數(shù)據(jù)

??

示例數(shù)據(jù)和預(yù)處理R代碼的百度盤(pán)鏈接(提取碼,sf9f):

https://pan.baidu.com/s/1nS402FLH3lQu8CNq6JjEsA

?

網(wǎng)盤(pán)附件“otu.txt”如下所示,以O(shè)TU的豐度為主,后面跟上這些OTU所屬的界門(mén)綱目科屬分類(lèi)。需要事先把一些注釋不明確的物種提前去除(比如unidentified、unknown、others等),否則導(dǎo)致了一些分類(lèi)關(guān)系混亂。然后將它讀到R中,整合各個(gè)分類(lèi)水平的包含關(guān)系,即上一級(jí)分類(lèi)和下一級(jí)分類(lèi)的對(duì)應(yīng)列表用作邊列表,并統(tǒng)計(jì)共計(jì)多少分類(lèi)類(lèi)型及其豐度用作節(jié)點(diǎn)列表。


#讀入數(shù)據(jù) otu <- read.delim('otu.txt', stringsAsFactors = FALSE, check.names = FALSE)#整合各分類(lèi)層級(jí)和所含物種豐度的嵌套關(guān)系,構(gòu)建網(wǎng)絡(luò)邊列表 #source 和 target 分別對(duì)應(yīng)了上下級(jí)物種分類(lèi)層級(jí)的對(duì)應(yīng)關(guān)系,abundance 表示 target 的豐度 genus_otu <- otu[c('genus', 'otu', 'abundance')] names(genus_otu) <- c('source', 'target', 'abundance') family_genus <- aggregate(otu$abundance, by = list(otu$family, otu$genus), FUN = sum) names(family_genus) <- c('source', 'target', 'abundance') order_family <- aggregate(otu$abundance, by = list(otu$order, otu$family), FUN = sum) names(order_family) <- c('source', 'target', 'abundance') class_order <- aggregate(otu$abundance, by = list(otu$class, otu$order), FUN = sum) names(class_order) <- c('source', 'target', 'abundance') phylum_class <- aggregate(otu$abundance, by = list(otu$phylum, otu$class), FUN = sum) names(phylum_class) <- c('source', 'target', 'abundance') kingdom_phylum <- aggregate(otu$abundance, by = list(otu$kingdom, otu$phylum), FUN = sum) names(kingdom_phylum) <- c('source', 'target', 'abundance')edge_list <- rbind(kingdom_phylum, phylum_class, class_order, order_family, family_genus, genus_otu)#將各個(gè)分類(lèi)層級(jí)對(duì)應(yīng)至 phylum,以便用于在 Cytoscape 中調(diào)整樹(shù)分支的顏色 otu_phylum <- otu[c('phylum', 'otu')] names(otu_phylum)[2] <- 'target' genus_phylum <- otu[c('phylum', 'genus')] names(genus_phylum)[2] <- 'target' family_phylum <- otu[c('phylum', 'family')] names(family_phylum)[2] <- 'target' order_phylum <- otu[c('phylum', 'order')] names(order_phylum)[2] <- 'target' class_phylum <- otu[c('phylum', 'class')] names(class_phylum)[2] <- 'target' phylum_phylum <- otu[c('phylum', 'phylum')] names(phylum_phylum)[2] <- 'target'tax_phylum <- rbind(phylum_phylum, class_phylum, order_phylum, family_phylum, genus_phylum, otu_phylum) tax_phylum <- tax_phylum[!duplicated(tax_phylum$target), ] edge_list <- merge(edge_list, tax_phylum, by = 'target', all.x = TRUE)#輸出邊列表 edge_list <- edge_list[c('source', 'target', 'abundance', 'phylum')] edge_list$weight <- 1 head(edge_list)write.table(edge_list, 'edge_list.txt', row.names = FALSE, sep = '\t', quote = FALSE)


#構(gòu)建節(jié)點(diǎn)列表,包括各個(gè)分類(lèi)水平的名稱(chēng),以及所含物種總豐度等 node_list <- reshape2::melt(otu, id = 'abundance') node_list <- aggregate(node_list$abundance, by = list(node_list$value, node_list$variable), FUN = sum) names(node_list) <- c('shared name', 'taxonomy', 'abundance')#原始豐度 abundance 的數(shù)值差較大,不利于直接使用該列在 Cytoscape 中定義節(jié)點(diǎn)大小 #再指定個(gè)新列 abundance2,對(duì)原始的 abundance 作些轉(zhuǎn)換,比如 log 降低高豐度的權(quán)重等 node_list$abundance2 <- log(node_list$abundance+1, 2) #log 轉(zhuǎn)化時(shí)加個(gè)基數(shù) 1#添加節(jié)點(diǎn)的 phylum 水平分類(lèi) otu_phylum <- otu[c('phylum', 'otu')] names(otu_phylum)[2] <- 'shared name' genus_phylum <- otu[c('phylum', 'genus')] names(genus_phylum)[2] <- 'shared name' family_phylum <- otu[c('phylum', 'family')] names(family_phylum)[2] <- 'shared name' order_phylum <- otu[c('phylum', 'order')] names(order_phylum)[2] <- 'shared name' class_phylum <- otu[c('phylum', 'class')] names(class_phylum)[2] <- 'shared name' phylum_phylum <- otu[c('phylum', 'phylum')] names(phylum_phylum)[2] <- 'shared name'tax_phylum <- rbind(phylum_phylum, class_phylum, order_phylum, family_phylum, genus_phylum, otu_phylum) tax_phylum <- tax_phylum[!duplicated(tax_phylum$'shared name'), ] node_list <- merge(node_list, tax_phylum, by = 'shared name', all.x = TRUE)#根據(jù)事先選擇的一些重要節(jié)點(diǎn)名稱(chēng),在節(jié)點(diǎn)列表中標(biāo)識(shí)出后輸出節(jié)點(diǎn)列表 select_node <- read.delim('select_node.txt', stringsAsFactors = FALSE)node_list[which(node_list$'shared name' %in% select_node$id),'select'] <- 1 node_list[which(! node_list$'shared name' %in% select_node$id),'select'] <- 0 head(node_list)write.table(node_list, 'node_list.txt', row.names = FALSE, sep = '\t', quote = FALSE)


??

Cytoscape的可視化

??

這樣兩個(gè)輸入文件就準(zhǔn)備好了,分別為上述R輸出的“edge_list.txt”和“node_list.txt”,導(dǎo)入至Cytoscape中進(jìn)行可視化。

1 讀取輸入文件

打開(kāi)Cytoscape后,點(diǎn)擊“Import Network from File System”讀取邊列表,也就是上述輸出的“edge_list.txt”;以及點(diǎn)擊“Import Table from File”讀取節(jié)點(diǎn)列表,“node_list.txt”。

文件導(dǎo)入后,Cytoscape中自動(dòng)呈現(xiàn)一幅網(wǎng)絡(luò)圖,這個(gè)網(wǎng)絡(luò)圖的結(jié)構(gòu)就代表了給定的物種分類(lèi)樹(shù)了。


??

2 邊的顏色和尺寸等屬性調(diào)整

點(diǎn)擊界面左側(cè)“Style”按鈕進(jìn)入外觀調(diào)整選項(xiàng)。首先是對(duì)邊的調(diào)整,點(diǎn)擊下方“Edge”后進(jìn)入邊樣式調(diào)整界面。

已知該網(wǎng)絡(luò)代表了物種分類(lèi)樹(shù),如上所述,從高級(jí)分類(lèi)水平(界)的根節(jié)點(diǎn)開(kāi)始,依次往低分類(lèi)層級(jí)(門(mén)綱目科屬等)延伸,逐漸形成分支。因此,下游的分類(lèi)分支都衍生自上游高級(jí)分類(lèi)分支。參考圖中將衍生自同一門(mén)分類(lèi)的微生物分支賦值相同的顏色,這里我們效仿,在上文的R操作過(guò)程中已經(jīng)對(duì)網(wǎng)絡(luò)中每條邊做了歸類(lèi),邊列表中的“phylum”列就記錄了分支對(duì)應(yīng)的門(mén)分類(lèi)水平。點(diǎn)擊“Stroke Color”,按邊列表中的“phylum”列分配顏色。

邊的顏色是主要的調(diào)節(jié)屬性。對(duì)于其它的屬性,視情況自定義修改。例如如果覺(jué)得邊太細(xì),就可以點(diǎn)擊“Width”將邊的尺寸設(shè)置的寬一些,使其更清晰。


??

3 背景色調(diào)整

隨后,點(diǎn)擊下方“Network”,將“Background Paint”背景色設(shè)置為黑色。


??

4 節(jié)點(diǎn)的顏色和尺寸等屬性調(diào)整

然后是對(duì)節(jié)點(diǎn)的調(diào)整,點(diǎn)擊下方“Node”后進(jìn)入節(jié)點(diǎn)樣式調(diào)整界面。

對(duì)于節(jié)點(diǎn)顏色,點(diǎn)擊“Fill Color”,按節(jié)點(diǎn)列表中的“select”列分配顏色,將1(標(biāo)記的重要的微生物)賦值為紅色,0(不重要的)賦值為白色。

對(duì)于節(jié)點(diǎn)形狀,勾選下方“Lock node width and height”后,點(diǎn)擊“Shape”統(tǒng)一設(shè)置為圓形。

對(duì)于節(jié)點(diǎn)大小,點(diǎn)擊“Size”,按節(jié)點(diǎn)列表中的“abundance2”列指定大小。該列是個(gè)連續(xù)的數(shù)值,大值對(duì)應(yīng)大點(diǎn),小值對(duì)應(yīng)小點(diǎn)。

以及點(diǎn)擊“Properties”顯示出“Label Transparency”選項(xiàng)后統(tǒng)一設(shè)置為0,即將節(jié)點(diǎn)標(biāo)簽均設(shè)置為透明,以去除節(jié)點(diǎn)標(biāo)簽。


??

5 網(wǎng)絡(luò)布局調(diào)整

上述過(guò)程都很簡(jiǎn)單,不再多說(shuō)了,大家看著來(lái)設(shè)置就行。

最后是調(diào)整網(wǎng)絡(luò)布局,獲得類(lèi)似示例圖中的樹(shù)狀結(jié)構(gòu)??梢韵葒L試一些自動(dòng)布局,看看哪些布局風(fēng)格效果較好。下圖展示一些和示例圖較為相似的自動(dòng)布局,以及一些不相似但是可能有趣的自動(dòng)布局,供大家參考吧。

點(diǎn)擊菜單欄“Layout”,提供了N種預(yù)設(shè)布局;此外“Apps”中可以下載更多樣式的插件,例如yFiles布局就是在“Apps”中找的拓展插件之一。



?

這些自動(dòng)布局也就是有幾分相似而已。一般來(lái)說(shuō),網(wǎng)絡(luò)圖布局光靠自動(dòng)布局是難以滿足需求的,配合手工調(diào)整肯定是免不了的,只是手工調(diào)整的過(guò)程會(huì)很糟心……哦對(duì)了,說(shuō)不定真的有自動(dòng)布局能夠出來(lái)示例圖樣式,只是沒(méi)找到而已。

以下簡(jiǎn)單展示一個(gè)手工調(diào)節(jié)布局的過(guò)程。以“Prefuse Force Directed Layout?(按?weight?列定義布局)”布局為例,因?yàn)樗奈⑸锕?jié)點(diǎn)分類(lèi)層次不明確,有待手動(dòng)拖一下。當(dāng)然,實(shí)際情況中盡可能找一個(gè)最相似的布局來(lái),這樣可以簡(jiǎn)化手動(dòng)的工作量。點(diǎn)擊“Select”,按微生物節(jié)點(diǎn)所屬的門(mén)分類(lèi)水平進(jìn)行選擇,并將選中的節(jié)點(diǎn)拉動(dòng)至一旁,就可和其它類(lèi)群分開(kāi)了。隨后,設(shè)法手動(dòng)選擇節(jié)點(diǎn)子集,并拖動(dòng)將該類(lèi)群內(nèi)部的節(jié)點(diǎn)的層次結(jié)構(gòu)盡可能區(qū)分明顯。

把所有節(jié)點(diǎn)的層次關(guān)系調(diào)整好,將微生物的分類(lèi)關(guān)系較好地呈現(xiàn)出,總之工作量挺大的。所以,白魚(yú)同學(xué)就沒(méi)再繼續(xù),為了一個(gè)示例耗費(fèi)大量時(shí)間在里面就不值得了……本篇教程只是作為方法類(lèi)指引,幫助大家了解大體上是怎樣的操作過(guò)程就可以了。真正有需要時(shí),再花點(diǎn)時(shí)間配合手工琢磨布局,再慢1天也能搞定了吧。



??

6 關(guān)于文字圖例的添加

最后,如果在Cytoscape中調(diào)試出了想要的結(jié)果,點(diǎn)擊“File > Export > Network to Image”將圖片導(dǎo)出為pdf矢量圖后,放在AI(Adobe Illustrator)中補(bǔ)充文字標(biāo)簽。例如示例圖中,微生物門(mén)水平的名稱(chēng)、節(jié)點(diǎn)數(shù)量和所含物種的豐度占比等,就可以通過(guò)AI補(bǔ)充。


?

整體過(guò)程大致就這樣吧,最麻煩的在布局調(diào)整那一步,其它倒還好??傊嬉写诳梢暬@樣一張圖的話,有耐心就是了……集中精力,1天差不多也能搞定了。

新出爐的Cytoscape視頻教程

Cytoscape制作帶bar圖和pie圖節(jié)點(diǎn)的網(wǎng)絡(luò)圖

往期精品(點(diǎn)擊圖片直達(dá)文字對(duì)應(yīng)教程)

后臺(tái)回復(fù)“生信寶典福利第一波”或點(diǎn)擊閱讀原文獲取教程合集

?

總結(jié)

以上是生活随笔為你收集整理的Cytoscape可视化物种分类树结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。