2012-12-19 13 views
25

मैं पेड़ की तरह डेटा का उपयोग कर ग्राफ बनाने की कोशिश कर रहा हूं, जहां नोड्स आम तौर पर> 2 किनारों में विभाजित होते हैं। मैंने विभिन्न लेआउट का प्रयास किया है, और मुझे लगता है कि layout.reingold.tilford पैरामीटर गैर-बिफुरेटिंग डेटा वाले पेड़-जैसे ग्राफ उत्पन्न करेगा। हालांकि आउटपुट विशेष रूप से आकर्षक नहीं हैं। मैं लेआउट.एलजीएल या layout.kamada.kawai जैसे कुछ का उपयोग करता हूं क्योंकि ये अधिक रेडियल संरचनाओं का उत्पादन करते हैं। मैं नहीं देख सकता कि आर में पैरामीटर को कैसे बदला जाए, जैसे कि इन पेड़ों में कोई ओवरलैपिंग किनार नहीं है। क्या यह संभव है?igraph में गैर-ओवरलैपिंग किनारों को प्राप्त करने के लिए मुझे किस लेआउट का उपयोग करना चाहिए?

मैंने 355 नोड्स और 354 किनारों के साथ, पजेक प्रारूप में एक साधारण डेटा फ़ाइल आयात की। मैं वर्तमान में उपयोग कर उसे प्रिंट कर रहा हूँ:

plot.igraph(g,vertex.size=3,vertex.label=NA,layout=layout.lgl) 

यह मुझे इस तरह एक आउटपुट, जो अच्छा है देता है, लेकिन अभी भी किनारों ओवरलैपिंग गया है। मैंने पढ़ा है कि आप इसे tkplot, या साइटोस्केप जैसे किसी अन्य प्रोग्राम का उपयोग करके मैन्युअल रूप से ठीक कर सकते हैं, हालांकि मेरे पास इनमें से कुछ बनाने के लिए है, और उनमें से आकार मैन्युअल सुधार को परेशानी बनाता है।

बहुत धन्यवाद। Here is an example of the output I get

उत्तर

11

layout.reingold.tilford में circular नामक एक पैरामीटर है। इसे TRUE पर सेट करने से एक्स कोऑर्डिनेट को कोण के रूप में (उचित बचाव के बाद) और वाई को त्रिज्या के रूप में समन्वयित करके अंतिम लेआउट को रेडियल में परिवर्तित कर दिया जाएगा। विडंबना यह है कि पर्याप्त, यह गारंटी नहीं है कि वहाँ अंत में कोई बढ़त क्रॉसिंग हो जाएगा, लेकिन यह अच्छी तरह से काम करता है अगर आपके subtrees बेहद विस्तृत ग्राफ के बाकी की तुलना में नहीं हैं:

> g <- barabasi.game(100, directed=F) 
> layout <- layout.reingold.tilford(g, circular=T) 
> plot(g, layout=layout) 
18

आप layout.fruchterman.reingold() करके देख सकते हैं । ऐसा लगता है कि किनारों को पार करने से रोकना अच्छा काम करता है। मैंने इसे @ तामास द्वारा सुझाए गए बरबासी ग्राफ के 355 नोड संस्करण के साथ परीक्षण किया है।

library(igraph) 

g = barabasi.game(355, directed=FALSE) 

png("plot1.png", height=6, width=12, units="in", res=200) 
par(mfrow=c(1, 2)) 

plot.igraph(g,vertex.size=3,vertex.label=NA, 
    layout=layout.fruchterman.reingold(g, niter=10000)) 
mtext("layout.fruchterman.reingold, area = vcount^2", side=1) 

plot.igraph(g,vertex.size=3,vertex.label=NA, 
    layout=layout.fruchterman.reingold(g, niter=10000, area=30*vcount(g)^2)) 
mtext("layout.fruchterman.reingold, area = 30 * vcount^2", side=1) 

dev.off() 

enter image description here

+3

चेतावनी संदेश: लेआउट_with_fr (सूची (355, गलत, सी (1, 2, 3, 4, 5, 6, 7, 8, 9,) में समान ग्राफ बनाने की इच्छा रखने वाले किसी भी व्यक्ति की सहायता करता है: तर्क 'क्षेत्र' को बहिष्कृत किया गया है और इसका कोई प्रभाव नहीं है – EngrStudent

+0

@bdemarest: क्या आपके पास "क्षेत्र" तर्क के बजाय उपयोग करने के बारे में कोई सुझाव है, कृपया? "क्षेत्र" बहिष्कृत है और मैं अभी आपके समाधान को पुन: उत्पन्न नहीं कर सकता। धन्यवाद विचारों के लिए! – nilsole

+0

'? layout_with_fr' coolexp, maxdelta, क्षेत्र, repulserad \t ये तर्क igraph संस्करण 0.8.0 से समर्थित नहीं हैं और अनदेखा (चेतावनी के साथ) हैं। – pengchy

16

बस एक टिप्पणी जोड़ना चाहते हैं, लेकिन मेरे प्रतिनिधि बहुत कम है। @bdemarest पोस्ट की गई विधि igraph संस्करण> 0.7 पर काम नहीं करती है। नया संस्करण area पैरामीटर का समर्थन नहीं करता है, इसलिए मुझे एक ही प्रभाव नहीं मिल सकता है। और पुराने संस्करण को बनाने के लिए मुझे थोड़ी देर लग गई, इसलिए मैं कुछ अंतर्दृष्टि साझा करता था। यदि आप इसे igraph nightly builds से डाउनलोड करते हैं तो आप स्रोत से igraph 0.7 मैन्युअल रूप से इंस्टॉल कर सकते हैं। मेरी मशीन (मैक ओएस 10.10) पर, मुझे gfortran के कारण इसे बनाने में कुछ समस्याएं आईं, इसलिए मुझे this link मिला जो समस्या का समाधान करता था। उम्मीद है कि आर

+1

आपको कुछ repo ... :) – Aminadav

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

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