2013-04-14 8 views
8

में सही ढंग से रंग कोने रंग कोनेआर igraph

को मैं igraph उपयोग कर रहा हूँ मैं दो CSV फ़ाइलों जवाब और ग्राफ के टोपोलॉजी है।

उत्तर: (इस बताता है कि खिलाड़ियों को कश्मीर और एन का सही उत्तर)

Player Q1_I1 
1  k  1 
2  l  0 
3  n  1 
4  m  0 

टोपोलॉजी: (कौन किसे से जुड़ा है का प्रतिनिधित्व)

Node.1 Node.2 
1  k  l 
2  l  k 
3  l  m 
4  m  l 
5  l  n 
6  n  l 
7  n  k 
8  k  n 

मैं एक ग्राफ पैकेज का उपयोग निर्माण करना चाहता था IGraph और उनके रंगों के आधार पर विभिन्न रंगों में रंगीन शिखर रंग।

# reads answers and creates a graph from topology 
answers <- read.csv("answers2.csv",header=T) 
data<-read.csv('edges2.csv') 
data<-graph.data.frame(data1, directed=FALSE) 
g<-simplify(data) 

# goes through vertices and colors them in different color, depending on correctness. 
# 2 means second column (First one is the players name) 
V(g)$color <- ifelse(answers[V(g), 2] == 1, "blue", "red") 
plot(g, layout=layout.fruchterman.reingold, vertex.color=V(g)$color) 

समस्या यह है कि मेरी उत्पादन में रंग गलत हैं:, enter image description here

यहाँ एम और कश्मीर के रूप में सही चिह्नित कर रहे हैं, जबकि यह होना चाहिए

यह है कि मैं क्या प्राप्त करने में सक्षम था एन और के। मुझे लगता है कि समस्या यह है क्योंकि मैं यह निर्दिष्ट नहीं कर रहा हूं कि नोड को प्लेयर से संबंधित होना चाहिए, और मैंने इसे हासिल करने की कोशिश की, लेकिन बिना किसी सफलता के।

क्या कोई विचार है कि इसे कैसे प्राप्त किया जाए?

उत्तर

13

सबसे आसान ग्राफ़ बनाने के लिए सभी मेटा डेटा के साथ शामिल है और उसके बाद igraph लेता है बाकी की देखभाल जैसे

library(igraph) 

answers <- read.table(textConnection(
    " Player Q1_I1                
    1  k  1                
    2  l  0                
    3  n  1                
    4  m  0                
")) 

topology <- read.table(textConnection(
    " Node.1 Node.2                
    1  k  l                
    2  l  k                
    3  l  m                
    4  m  l                
    5  l  n                
    6  n  l                
    7  n  k                
    8  k  n                
")) 

g2 <- graph.data.frame(topology, vertices=answers, directed=FALSE) 
g <- simplify(g2) 
V(g)$color <- ifelse(V(g)$Q1_I1 == 1, "lightblue", "orange") 

plot(g) 

plot

लेकिन, वास्तव में अगर आप अपने डेटा तालिका में दोनों दिशाओं में प्रत्येक बढ़त शामिल नहीं हैं, तो आप भी आसान बनाने में कॉल करने के लिए की जरूरत नहीं है।

+2

@ सल्वाडोरडाली: 'get.vertex.attribute' देखें,' वी (जी) $ मूल्य' सिर्फ एक वाक्य रचनात्मक चीनी है, यह 'get.vertex.attribute' कहता है। –

+0

जब मैं ऐसा करता हूं तो मुझे एक त्रुटि मिलती है: 'आपूर्ति रंग न तो संख्यात्मक और न ही चरित्र है। "एक सोलन नहीं लग रहा है। – fraxture

4

समस्या यह है कि ग्राफ simplify के बाद सॉर्ट किया गया है और उत्तर वेक्टर नहीं है। एक आसान तरीका हो सकता है, लेकिन V(g)$color <- ifelse(answers[V(g), 2] == 1, "blue", "red") सेट करने से पहले मैं आपकी उत्तर तालिका को आसानी से सॉर्ट करूंगा: answers <-answers[order(answers[,1]),]

आप देख सकते हैं कि आपके ग्राफ get.data.frame(g, what="vertices")

वैकल्पिक रूप से क्रमबद्ध किया जाता है, तो आप get.data.frame नाम match सकता है (ध्यान दें कि मैं g दो बार पैदा करते हैं। किसी कारण से, get.data.framesimplify के साथ अच्छी तरह अदा नहीं करता है।

answers <- read.csv("c:/answers2.csv",header=T) 
data1<-read.csv('c:/edges2.csv') 
data2<-graph.data.frame(data1, directed=FALSE) 
g<-simplify(data2) 
ordered.vertices <-get.data.frame(g, what="vertices") 
g<-simplify(data2) 
V(g)$color <- ifelse(answers[match(answers[,1],ordered.vertices$name), 2] == 1, "blue", "red") 
plot(g, layout=layout.fruchterman.reingold, vertex.color=V(g)$color) 

enter image description here

+1

इस कॉल को 'प्लॉट' से पहले 'l <-layout.fruchterman.reingold (g)' के रूप में लेआउट को "ठीक करें"। निम्नलिखित की तरह एक साजिश कॉल लेआउट को अपरिवर्तित रखेगी: 'साजिश (जी, लेआउट = एल, vertex.color = वी (जी) $ रंग)' –

+0

'सरलीकृत' कॉल करने के बाद कोष्ठकों का क्रम समान है मूल ग्राफ। और आदेश मनमाने ढंग से है, वर्तमान कार्यान्वयन में यह आदेश के अनुरूप है क्योंकि किनारों की सूची में शीर्षस्थता दिखाई देती है, यदि 'चरमपंथी तर्क नहीं दिया गया है, और' कोष्ठक 'में क्रम में, यदि यह है। –

संबंधित मुद्दे