用 igraph 绘制网络
Posted
技术标签:
【中文标题】用 igraph 绘制网络【英文标题】:Plot networks with igraph 【发布时间】:2013-12-27 12:28:15 【问题描述】:我想从相关矩阵创建一个网络并绘制它。我正在尝试为此使用 igraph。这是我的数据的一个子集。
我的数据
Taxon CD1 CD2
Actinomycetaceae;g__Actinomyces 0.072998825 0.031399459
Coriobacteriaceae;g__Atopobium 0.040946468 0.002703265
Corynebacteriaceae;g__Corynebacterium 0.002517201 0.006446247
Micrococcaceae;g__Rothia 0.001174694 0.002703265
Porphyromonadaceae;g__Porphyromonas 0.023326061 0.114368892
Prevotellaceae;g__Prevotella 0.252894781 0.102308172
Flavobacteriaceae;g__Capnocytophaga 0.001174694 0.029320025
Aerococcaceae;g__Abiotrophia 0.002013761 0.003327095
Carnobacteriaceae;g__Granulicatella 0.042960228 0.049490539
Gemellaceae;g__Gemella 0.027857023 0.067165731
Streptococcaceae;g__Streptococcus 0.220506796 0.182782283
ClostridialesFamilyXI.IncertaeSedis;g__ 0.000000000 0.000623830
ClostridialesFamilyXIII.IncertaeSedis;g__Mogibacterium 0.006880349 0.002495321
Lachnospiraceae;Other 0.000335627 0.000831774
Clostridia 0.004363148 0.002079434
Lachnospiraceae;g__Oribacterium 0.003524081 0.002079434
Peptostreptococcaceae;g__Peptostreptococcus 0.000167813 0.005198586
Veillonellaceae;Other 0.001342507 0.001455604
Veillonellaceae;g__Veillonella 0.047323376 0.082553545
Fusobacteriaceae;g__Fusobacterium 0.009229737 0.010813059
Fusobacteriaceae;g__Leptotrichia 0.092465179 0.076523186
Neisseriaceae;g__Neisseria 0.013592885 0.027656477
Pasteurellaceae;g__Haemophilus 0.014431952 0.092534831
SR1;c__;f__;g__ 0.000000000 0.002079434
TM7;c__TM7-3;f__;g__ 0.065782849 0.018299023
Erysipelotrichaceae;g__Bulleidia 0.007551603 0.004366812
Bacteroidia 0.000000000 0.000415887
Porphyromonadaceae;g__Tannerella 0.000671254 0.002079434
Flavobacteriaceae 0.002013761 0.001247661
Bacilli 0.002181574 0.002911208
Clostridia;f__;g__ 0.000671254 0.002703265
ClostridialesFamilyXIII.IncertaeSedis;g__Eubacterium 0.003020641 0.002079434
Lachnospiraceae;g__Moryella 0.003188454 0.000623830
Veillonellaceae;g__Selenomonas 0.004866588 0.021834061
Fusobacteriaceae 0.000335627 0.001871491
Campylobacteraceae;g__Campylobacter 0.001510321 0.001247661
Pasteurellaceae;g__Actinobacillus 0.002852828 0.000207943
Burkholderiaceae;g__Lautropia 0.000000000 0.002495321
Lactobacillaceae;g__Lactobacillus 0.000000000 0.000000000
Staphylococcaceae;g__Staphylococcus 0.000000000 0.000000000
这是我运行的:
> library(psych)
> mydata <- read.csv(file="L5_filt.txt", header=T, row.names=1, sep="\t")
> mydata_t <- t(as.matrix(mydata))
> cor.matrix <- cor(mydata_t, method = "spearman")
> t = which(cor.matrix > 0.6 & lower.tri(cor.matrix),arr.ind=TRUE)
> t.graph=graph.data.frame(t,directed=F)
> t.names <- colnames(cor.matrix)[as.numeric(V(t.graph)$name)]
> par(mai=c(1,1,0.1,0.15), mar=c(1, 0, 1, 1), mgp=c(2,1,0), mfrow=c(1,2), cex=0.7, lwd=0.5)
> plot(t.graph, vertex.size=5, vertex.shape="circle", vertex.label.color="red", vertex.label=t.names, vertex.label.cex=0.9, edge.width=1, layout=layout.fruchterman.reingold)
现在我想在同一个图上显示所有“强”相关性,包括正相关和负相关,因此 r>0.6 和
如何修改我的代码来获得这个?
谢谢, 弗朗西斯卡
【问题讨论】:
【参考方案1】:您应该使用abs
来选择您的元素:
t = which(abs(cor.matrix) > 0.6 & lower.tri(cor.matrix),arr.ind=TRUE)
注意这里你的矩阵只包含 1,-1,NA,也许你应该回顾一下你是如何计算相关性的。
然后使用 , t 索引来创建一个像这样的颜色向量,例如:
E(t.graph)$color = ifelse(cor.matrix[t] > 0.6,'magenta','green')
那么你使用相同的情节语句。
【讨论】:
我使用了 corr.test 函数来生成相关矩阵 cor.matrix 0.6 & lower.tri(cor.matrix),arr.ind=TRUE) 我收到一个错误:abs(cor.matrix) 中的错误:数学函数的非数字参数你知道我该怎么做吗?生成一个值从 -1 到 +1 的相关矩阵,然后我可以使用它来构建网络? 如果您使用过corr.test
,请将所有实例cor.matrix
替换为cor.matrix$r
。
你发现Kendall cor rank有什么不同吗?以上是关于用 igraph 绘制网络的主要内容,如果未能解决你的问题,请参考以下文章