2011-08-11 15 views
9

में प्रतिपादन मल्टीवे ट्री किसी पता है कि कैसे मैं एक सौंदर्य की दृष्टि से प्रशंसनीय तरह से बहु तरफ़ा पेड़ साजिश करते हैं? जानकारी:आरेखण और अजगर

  • कम या ज्यादा 100
  • प्रत्येक स्तर आइटम मदों की लगभग एक ही नंबर है
  • 10 स्तरों
  • प्रत्येक नोड है (पत्ती) और 6
  • प्रत्येक नोड 0 के बीच बच्चे
  • अपनी जड़ों को कोई फर्क नहीं पड़ता, इसका अपना स्तर निर्दिष्ट करें।

मैं वर्तमान में, जनहित याचिका उपयोग कर रहा हूँ प्रत्येक "पंक्ति" नोड्स के img.size()[0]/संख्या में विभाजित है, और draw.line साथ लाइनों ड्राइंग किनारों का प्रतिनिधित्व करने, लेकिन यह पूरी तरह से में गड़बड़ है

मुझे आशा है कि आप कर सकते हैं मेरी मदद करें =], कोई भी जानकारी जो मैं पोस्ट करूंगा।

उत्तर

15

तो, प्रतिपादन ग्राफ graphviz का विशेष प्रतिभा है, जिसमें कई लाइब्रेरी भी होती हैं जो पाइथन बाइंडिंग प्रदान करती हैं। मेरी राय में, इन बाइंडिंग पुस्तकालयों में से सर्वश्रेष्ठ pygraphviz है। ग्राफविज़ शायद सबसे अच्छा समाधान है और सबसे सरल भी संभव है।

विशेष लेआउट आप अपने प्रश्न, एक पदानुक्रमित, स्तरित योजना में वर्णन है, Graphviz 'डॉट लेआउट इंजन द्वारा आसानी से किया जाता है। । डॉट सुनिश्चित करना है कि ग्राफ एक प्राकृतिक पेड़ विन्यास में खर्च की गई थी प्रतिपादन करता है - यानी, माता-पिता अपने बच्चों को नोड्स ऊपर तैनात कर रहे हैं; बराबर का दर्जा (जड़ से स्तर) के नोड्स सम तैनात डब्ल्यू/आर/टी y- अक्ष जब संभव हो रहे हैं, और प्राकृतिक समरूपता जब संभव संरक्षित है।

(नोट: भी संदेहास्पद डॉट कई लेआउट इंजन कि Graphviz शामिल में से एक को संदर्भित करता है, लेकिन डॉट भी सभी Graphviz दस्तावेज़ों के लिए फ़ाइल स्वरूप का नाम और फ़ाइल एक्सटेंशन कि वे किस तरह गाया जाता है की परवाह किए बिना है)।

तुम मेरे कोड है कि इस प्रकार है, pygraphviz का उपयोग करने में देख सकते हैं, यह आसान अपने ग्राफ के लिए लेआउट इंजन के रूप में डॉट चयन करने के लिए है, हालांकि यह वास्तव में डिफ़ॉल्ट (neato है) नहीं है।

यहां एक त्वरित ग्राफ मैंने बनाया और फिर डॉट का उपयोग कर गाया है --created और pygraphviz के माध्यम से Graphviz का उपयोग कर गाया।

सूचना ग्राफ एकदम सही लेआउट है कि - एक ही डिग्री के नोड्स हैं एक ऊर्ध्वाधर अक्ष के साथ एक ही स्तर पर, बच्चों के माता पिता और प्राकृतिक 'समरूपता' नीचे गाया जाता है संरक्षित है जब संभव हो (उदाहरण के लिए, एक माता पिता नोड स्थिति में है । Graphviz, यानी, डॉट, यह स्वतः ही संभालती है - के बीच और उसके दो बच्चे नोड्स ऊपर और तुम देख सकते हैं, मेरी कोड में से कोई भी मैन्युअल रूप से लेआउट नियंत्रित करता है।

import pygraphviz as PG 

A = PG.AGraph(directed=True, strict=True) 

A.add_edge("7th Edition", "32V") 
A.add_edge("7th Edition", "Xenix") 
# etc., etc. 

# save the graph in dot format 
A.write('ademo.dot') 

# pygraphviz renders graphs in neato by default, 
# so you need to specify dot as the layout engine 
A.layout(prog='dot') 


# opening the dot file in a text editor shows the graph's syntax: 
digraph unix { 
    size="7,5"; 
    node [color=goldenrod2, style=filled]; 
    "7th Edition" -> "32V"; 
    "7th Edition" -> "V7M"; 
    "7th Edition" -> "Xenix"; 
    "7th Edition" -> "UniPlus+"; 
    "V7M" -> "Ultrix-11"; 
    "8th Edition" -> "9th Edition"; 
    "1 BSD" -> "2 BSD"; 
    "2 BSD" -> "2.8 BSD"; 
    "2.8 BSD" -> "Ultrix-11"; 
    "2.8 BSD" -> "2.9 BSD"; 
    "32V" -> "3 BSD"; 
    "3 BSD" -> "4 BSD"; 
    "4 BSD" -> "4.1 BSD"; 
    "4.1 BSD" -> "4.2 BSD"; 
    "4.1 BSD" -> "2.8 BSD"; 
    "4.1 BSD" -> "8th Edition"; 
    "4.2 BSD" -> "4.3 BSD"; 
    "4.2 BSD" -> "Ultrix-32"; 
} 

enter image description here

+0

सिर्फ सही, मैं सिर्फ लेआउट, रंगों, यीशु के रक्त का अनुकूलन करने के ... धन्यवाद किया है। =] – BrainStorm

+0

@ डौग, क्या आप मुझे बताएंगे कि मैं पैरामीटर के साथ नोड स्तर (लाइन) कैसे सेट करूं? सिर्फ सौंदर्यशास्त्र के लिए। – BrainStorm

+0

@ ब्रेनस्टॉर्म: ठीक है, डॉट आमतौर पर बिना किसी अतिरिक्त कॉन्फ़िगर के उस का ख्याल रखता है। इस नोड कॉन्फ़िगरेशन को मजबूर करने के लिए - एक स्पष्ट बाधा सेट करें - मुश्किल नहीं है, लेकिन दो चरणों की आवश्यकता है: (i) एक 'सबग्राफ' परिभाषित करें (आपके ग्राफ़ में नोड्स का समूह समान क्षैतिज स्थिति के लिए); और (ii) उपग्राफ परिभाषा में, 'रैंक' विशेषता सेट करें, इस तरह: रैंक = वही। सबग्राफ को आगे बढ़ाने के लिए टिप्पणियों में अपर्याप्त स्थान, लेकिन यह पृष्ठ सरल उदाहरण देता है: http://www.graphviz.org/content/cluster – doug

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