2017-05-24 17 views
0

생물 네트워크를 사용하여 R에서 작업하고 있습니다. 시각화를 위해 Graphviz를 사용합니다. 나는이 examplecode으로 특정 노드를 색상 수 있습니다 MAPK Pathway Example
가 지금은 두 개의 서로 다른 색상으로 각 노드 색상을 원하는 : 여기 Graphviz를 사용하여 R에서 다른 색상의 그래프 노드

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() 

는 결과이다. Graphviz http://www.graphviz.org/content/attrs#kcolorList의 colorList 속성을 사용하려고했지만 나에게 적합하지 않습니다.
'green;0.5:red'로하고 fillColor을 변경하고 atri$node$style <- "filled" atri$node$gradientangle <- 0 설정은 나에게 여러 가지 빛깔의 노드에 대한 사용법을 설명하기 위해 R과 graphviz를 attributs와

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

는 누구의 expirience을 가지고이 오류가 발생합니다?

답변

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 파일의 예는 하나가이 파일을 생성하는 데 사용할 수있는 파이썬 코드의 일부의 조각입니다 -이 코드는, 내가 노드와의 목록을 가지고 가장자리의 목록, 나는 그들의 색깔뿐만 아니라 여러 다른 것들, 당신은 neato -Tpng <input> -O를 사용하여 위의 점 파일을 렌더링하는 경우

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') 

이 이미지를 생성합니다되어야 하는지를 결정하기 위해 이러한 노드에 저장된 특정 데이터를 가지고있는 모양은 This입니다.

저는 R이 아닌 파이썬으로 일한다는 것을 알고 있습니다. 저는 R을 모르며 더 효과적으로 질문에 대답 할 수 없다는 점에 유감입니다. 집에 가져 가면 .dot 파일 내의 노드 정의에있는 노드의 색상을 어떻게 든 가져와야합니다.

+0

감사합니다.하지만 문제를 명확하게해야합니다. 나는 노드가 녹색이고 나머지 절반이 적색 인 왼쪽 절반 모양과 같은 두 가지 색상으로 1 개의 노드를 색칠하고 싶습니다. Graphviz 웹 사이트의 설명에 따르면 colorList 속성은 내 게시물과 같이 각 노드마다 여러 색상을 사용할 수 있다고합니다. – Florian