2017-05-24 5 views
0

私は生物ネットワークでRで働いています。視覚化のために私はGraphvizを使用します。私はこのexamplecodeで特定のノードを色付けすることができます:MAPK Pathway Example
今、私は2つの異なる色で、各ノードを色付けしたい:ここGraphvizを使用してRで異なる色のgraphnode

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ファイルの一例であり、ここで1は、このファイルを生成するために使用することがありますPythonコードの一部の抜粋である - このコードでは、私は、ノードおよびAのリストを持っていますエッジのリスト、と私はどのような彼らの色を決定するためにそれらのノードに格納されている特定のデータだけでなく、他のいくつかのものを持って、

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

ありがとうございますが、問題をより明確にする必要があります。私は、ノードが緑色で残りの半分が赤色の左半分のような2つの異なる色で1つのノードを色付けしたい。 Graphvizのウェブサイトからの説明によると、属性colorListは自分の投稿のように各ノードに複数の色を受け入れます。 – Florian

関連する問題