2010-03-19 23 views
36

मैं उपयोग कर रहा हूँ Graphviz (डॉट) ग्राफ आप नीचे देख सकते उत्पन्न करने के लिए (अर्थात बढ़त क्रॉसिंग बचने के लिए)। के रूप में अपने किनारों आसन्न नोड के कई किनारों को पार निचले बाएँ कोने (लाल अंडाकार) में नोड झुंझलाहट का कारण बनता है। वहाँ एक निश्चित क्षेत्र के लिए नोड नियुक्ति को नियंत्रित करने के लिए एक तरीका है?Graphviz में नोड नियुक्ति को कैसे नियंत्रित करें

अपने विचारों के लिए धन्यवाद

graph with edge crossing several other edges http://i39.tinypic.com/e6od8z.png

उत्तर

9

मैं किसी भी साधन है जिसके द्वारा व्यक्ति नोड्स की नियुक्ति को नियंत्रित करने के बारे में पता नहीं कर रहा हूँ। यह वास्तव में क्योंकि आदेश है कि तुम क्या अंतिम ग्राफ की तरह है, फिर भी मैन्युअल रूप से एक नोड रखने तो बदल जाएगा कैसे ग्राफ के बाकी प्रदान की गई है दिखेगा पता करने की जरूरत होगी करने के लिए, मतलब नहीं है।

मैं जिस क्रम में मेरी नोड्स .dot फाइल में परिभाषित कर रहे हैं बदल रहा है, और ग्राफ स्तर पर nodesep और ranksep विशेषताओं को समायोजित करके इस समस्या का समाधान। यह शोधन की एक प्रक्रिया है - एक समय में कुछ चीजें फेरबदल जब तक यह सही लग रहा है।

तुम भी SVG के रूप में ग्राफ प्रस्तुत करना हो सकता है, तो Visio में आयात (या किसी अन्य संपादक) और मैन्युअल नोड्स आप से खुश नहीं हैं को पुनर्व्यवस्थित।

+1

मुझे नहीं लगता कि Visio एक सामान्य svg संपादित कर सकता है, लेकिन इंकस्केप सकता है। –

+0

@GringoSuave: इंकस्केप वास्तव में कर सकते हैं, लेकिन किनारों का पालन नहीं करते हैं यदि आप एक नोड चलते हैं। यह कुछ भी नोड्स के लिए कुछ भी अव्यवहारिक बनाता है। –

+2

यह गलत है और स्वीकृत उत्तर नहीं होना चाहिए। क्रमशः 30 और 20 वोटों के साथ उत्तर दिए गए हैं जिनमें से प्रत्येक एक स्वीकार्य उत्तर होगा। –

22

@Jannis, मामले में आप अभी भी इस का उत्तर में रुचि रखते हैं, वहाँ वास्तव में अलग-अलग नोड नियुक्ति को नियंत्रित करने के लिए एक रास्ता है - आप "स्थिति" विशेषता का उपयोग करें:

http://www.graphviz.org/doc/info/attrs.html#d:pos

इस का एक उदाहरण के रूप में, आप लिख सकते हैं:

n [pos="3,5!"]; 

कि नोड n ठीक (3,5) पर होना करने के लिए मजबूर होगा।

हालांकि, यह केवल लेआउट इंजन "एफडीपी" और "नेटो" के साथ काम करता है।

+18

'pin' विशेषता (!)," FDP, neato केवल "(यह डॉट के साथ काम नहीं करता है) है। इसलिए 'pos' का उपयोग करना डॉट के साथ व्यर्थ है जब तक कि आप डॉट लेआउट इंजन को बाईपास न करें। – nobar

+1

@ नोबार: हम्म, प्रलेखन को फिर से देखकर ऐसा लगता है कि आप सही हैं - मेरा बुरा, क्षमा करें। –

+0

मैंने देखा कि! एफडीपी के साथ भी काम नहीं करता है, हालांकि यह नीटो के साथ काम करता है। इसके अलावा, -s तर्क यह है कि में दिए गए निर्देशांक की स्केलिंग का प्रबंधन करना चाहिए "स्थिति" गुण (डिफ़ॉल्ट 72.0) काम करने के लिए प्रतीत नहीं होता है (यह segfaults कारण बनता है)। संक्षेप में: 'pos' विशेषता की सभी संख्याओं को 72.0 तक विभाजित करना और 'neato' कार्यों का उपयोग करना! –

35

लाल नोड को अन्य सभी नोड्स के बाईं ओर दिखाई देने के कारण, आप एक अदृश्य बाधा उत्पन्न कर सकते हैं।

redNode -> leftmostNode [style=invis]; 

से पहले:

before

के बाद:

after

+1

जिसने मेरी समस्या हल की। मैं बस कुछ और के दूसरी तरफ दिखने के लिए कुछ चाहता था। धन्यवाद। –

5

मैं किनारों जोड़कर बातें जहाँ आप उन्हें चाहते हैं, डाल करने के लिए Graphviz राजी के लिए @smokris '[style=invis] चाल की तरह जो लेआउट को प्रभावित लेकिन दिखाई नहीं देते हैं।


एक और चाल constraint attribute, आप किनारों जो दिखाई दे रहे हैं, लेकिन लेआउट को प्रभावित नहीं करते जोड़ने देता है जो है।

यदि कोई नया किनारा जोड़ना आपके ग्राफ़ को गड़बड़ कर देता है, तो उस किनारे पर [constraint=false] सेट करें: अब ग्राडविज़ नोड्स रखने पर इसे अनदेखा कर देगा।

तो false, धार रैंकिंग नोड्स में नहीं किया जाता है।उदाहरण के लिए, में ग्राफ

digraph G { 
    a -> c; 
    a -> b; 
    b -> c [constraint=false]; 
} 

बढ़त b -> c की कोई समस्या रैंक काम के दौरान नहीं जोड़ता है, इसलिए केवल कमी कर रहे हैं कि एक बी और सी से ऊपर हो, ग्राफ उपज:

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