一般来说网络图都是R语言导出数据放入cytoscape里面绘制,今天想试试在R语言内部去画,确实有相应的R包(igraph)可以做,不是专门针对PPI网络来的,自己组织一下数据可以画。
尤其是基因数量比较少的情况下,还是很好用的,省掉手动点鼠标的重复操作。
1.输入数据
string_interactions.tsv是从string网页下载的PPI网络输出结果文件。
图上基因的颜色是按照上下调来分配的,在这个例子里基因上下调信息是编的,实际应用时可以从差异分析结果中得到。
2.样图
3.代码如下
library(igraph)
links= read.delim("string_interactions.tsv")
network <- graph_from_data_frame(d=links[,c(1:2,13)], directed=F)
deg <- degree(network, mode="all")
nodes <- data.frame(
name=unique(links$X.node1),
group=c( rep("up",6),rep("down",5)))
network <- graph_from_data_frame(d=links, vertices=nodes, directed=F)
my_color = c("#66C2A5", "#FC8D62", "#8DA0CB")[as.numeric(as.factor(V(network)$group))]
par(bg="grey13", mar=c(0,0,0,0))
plot(network,
vertex.size=deg,
layout=layout.circle,
vertex.color=my_color,
vertex.label.cex=0.7,
vertex.label.color="white",
vertex.frame.color="transparent",
edge.width=E(network)$combined_score*3,
edge.curved=0.1)
legend(x=1, y=1,
legend=unique(V(network)$group),
col = unique(my_color) ,
bty = "n", pch=20 , pt.cex = 2, cex = 1,
text.col="white" , horiz = F)
plot(network,
vertex.size=deg,
layout=layout.fruchterman.reingold,
vertex.color=my_color,
vertex.label.cex=0.7,
vertex.label.color="white",
vertex.frame.color="transparent",
edge.width=E(network)$combined_score*3,
edge.curved=0)
legend(x=1, y=1,
legend=unique(V(network)$group),
col = unique(my_color) ,
bty = "n", pch=20 , pt.cex = 2, cex = 1,
text.col="white" , horiz = F)