2017-05-24 29 views
0

我正在R中使用生物網絡。爲了可視化,我使用Graphviz。我可以用顏色特定節點與此examplecode:graphnode在R中使用Graphviz中的不同顏色

source("https://bioconductor.org/biocLite.R") 
library(KEGGgraph) 
library("KEGG.db") 
tmp <- tempfile() 

pName <- "MAPK signaling pathway" 

pId <- mget(pName, KEGGPATHNAME2ID)[[1]] 

x<-retrieveKGML(pId, organism = "hsa", destfile = tmp, method = "wget",quiet =TRUE) 

mapkKGML <- system.file("extdata/hsa04010.xml", package = "KEGGgraph") 

mapkG <- parseKGML2Graph(mapkKGML,expandGenes=TRUE) 
anz <- nodes(mapkG)[c(1:5,11:25,41:45)] 
mapkGsub <- subGraph(anz, mapkG) 

library(Rgraphviz) 
outs <- sapply(edges(mapkGsub), length) >0 
ins <- sapply(inEdges(mapkGsub), length)>0 
ios <- outs|ins 


if(require(org.Hs.eg.db)){ 
    ioGeneID <- translateKEGG2GeneID(names(ios)) 
    nodesNames <- sapply(mget(ioGeneID, org.Hs.egSYMBOL, ifnotfound = NA), "[[",1) 
}else{ 
    nodesNames <- names(ios) 
} 

names(nodesNames) <- names(ios) 

atri    <- getDefaultAttrs() 
atri$node$shape  <- "ellipse" 
atri$node$label  <- nodesNames 
atri$edge$weight <- "0.3" 
atri$edge$minlen <- "2" 
atri$graph$rankdir <- "LR" 
atri$graph$size 
atri$graph$nodesep <- "0.05" 
atri$graph$ranksep <- "0.2" 
atri$edge$arrowsize <- "0.4" 
atri$node$fontsize <- "18" 
atri$node$height <- "2" 
atri$node$width  <- "3.5" 

noAttrs <- list() 
noAttrs$label <- nodesNames 
noAttrs$label 
ncolor <- c("green", "blue") 
names(ncolor) = nodes(mapkGsub)[1:2] 
noAttrs$fillcolor <- ncolor 

png(filename="170524_MAPK_Pathway_FS.png") 
plot(mapkGsub,nodeAttrs=noAttrs,attrs=atri) 
dev.off() 

下面是結果:MAPK Pathway Example
現在我想色搭配兩種不同顏色的每個節點。我試圖使用來自Graphviz http://www.graphviz.org/content/attrs#kcolorList的屬性colorList ,但它不適用於我。
更改填充顏色以'green;0.5:red'和設置atri$node$style <- "filled" atri$node$gradientangle <- 0拋出這個錯誤

Fehler in polygon(x.theta, y.theta, density = NA, border = fg, col = bg, : 
ungültiger Farbname in 'green;0.5:red' 

有沒有人用的expirience R和Graphviz的attributs解釋我多色節點的使用情況如何?

回答

0

graphviz圖的所有方面都取決於.dot文件中的內容。這裏是多種顏色

strict graph { 
graph [outputorder=edgesfirst]; 
"1_1_1" [color=red,shape=point,width="0.25"]; 
"2_1_67"  [color=blue,shape=point,width="0.25"]; 
"1_1_1" -- "2_1_67" [color=black,len=1];} 

和這裏.DOT文件的一個例子是一些Python代碼,您可能使用生成該文件的一個片段 - 在這段代碼中,我有個結點和列表邊緣的名單,我有存儲在這些節點的具體數據,以確定它們的顏色,以及其他一些事情,應該是什麼

import networkx as nx 
g=nx.Graph() 
for node in nodes: 
    splitnode=node.split("_") 
    if splitnode[0]=="2": 
     g.add_node(node,color='blue',shape='point',width=.1) 
    if splitnode[0]=="1": 
     g.add_node(node,color='red',shape='point',width=.1) 
for edge in edges: 
    if labels: 
     g.add_edge(edge[0],edge[1],len=edge[2],color='black',label=str(edge[2])) 
    else: 
     g.add_edge(edge[0],edge[1],len=edge[2],color='black') 
nx.drawing.nx_agraph.write_dot(g,'tmp.dot') 

如果渲染使用neato -Tpng <input> -O上述點文件時,它會產生一個圖像,其看起來像This

我知道您正在使用R而不是Python,並且我很抱歉我不知道R並且無法更有效地回答您的問題。拿回家的地方是你需要以某種方式獲得你的.dot文件中節點定義中節點的顏色。

+0

謝謝,但我必須讓我的問題更清楚。我想用兩種不同的顏色着色一個節點,如左半部分,節點是綠色,另一半是紅色。來自Graphviz網站的描述表明colorList屬性爲我的文章中的每個節點接受多種顏色。 – Florian