سؤال

في ال DOT لغة ل GraphViz, ، أحاول أن تمثل مخطط التبعية. أحتاج إلى أن أكون قادرا على الحصول على عقد داخل حاوية وأن أكون قادرا على جعل العقد و / أو الحاويات التي تعتمد على العقد / أو الحاويات الأخرى.

أنا استخدم subgraph لتمثيل الحاويات الخاصة بي. تعمل ربط العقدة على ما يرام، ولكن لا يمكنني معرفة كيفية توصيل الشركات الدراسية.

بالنظر إلى البرنامج أدناه، أحتاج إلى أن أكون قادرا على الاتصال cluster_1 و cluster_2 مع سهم، ولكن أي شيء حاولته يخلق عددا جديدة بدلا من توصيل المجموعات:

digraph G {

    graph [fontsize=10 fontname="Verdana"];
    node [shape=record fontsize=10 fontname="Verdana"];

    subgraph cluster_0 {
        node [style=filled];
        "Item 1" "Item 2";
        label = "Container A";
        color=blue;
    }

    subgraph cluster_1 {
        node [style=filled];
        "Item 3" "Item 4";
        label = "Container B";
        color=blue;
    }

    subgraph cluster_2 {
        node [style=filled];
        "Item 5" "Item 6";
        label = "Container C";
        color=blue;
    }

    // Renders fine
    "Item 1" -> "Item 2";
    "Item 2" -> "Item 3";

    // Both of these create new nodes
    cluster_1 -> cluster_2;
    "Container A" -> "Container C";
}

enter image description here

هل كانت مفيدة؟

المحلول

يعطي دليل مستخدم DOT مثال التالي على الرسم البياني مع مجموعات مع حواف بين المجموعات

digraph G {
  compound=true;
  subgraph cluster0 {
    a -> b;
    a -> c;
    b -> d;
    c -> d;
  }
  subgraph cluster1 {
    e -> g;
    e -> f;
  }
  b -> f [lhead=cluster1];
  d -> e;
  c -> g [ltail=cluster0,lhead=cluster1];
  c -> e [ltail=cluster0];
  d -> h;
}

والحواف بين العقد والمجموعات.

enter image description here

نصائح أخرى

لسهولة المرجع، فإن الحل الموصوف في إجابة HighPerformancemark في السؤال الأصلي، يبدو وكأنه هذا:

digraph G {

    graph [fontsize=10 fontname="Verdana" compound=true];
    node [shape=record fontsize=10 fontname="Verdana"];

    subgraph cluster_0 {
        node [style=filled];
        "Item 1" "Item 2";
        label = "Container A";
        color=blue;
    }

    subgraph cluster_1 {
        node [style=filled];
        "Item 3" "Item 4";
        label = "Container B";
        color=blue;
    }

    subgraph cluster_2 {
        node [style=filled];
        "Item 5" "Item 6";
        label = "Container C";
        color=blue;
    }

    // Edges between nodes render fine
    "Item 1" -> "Item 2";
    "Item 2" -> "Item 3";

    // Edges that directly connect one cluster to another
    "Item 1" -> "Item 3" [ltail=cluster_0 lhead=cluster_1];
    "Item 1" -> "Item 5" [ltail=cluster_0 lhead=cluster_2];
}

ال compound=true في ال graph الإعلان أمر حيوي. التي تنتج الناتج:

graph with connected clusters

لاحظ أنني قمت بتغيير الحواف إلى العقد المرجعية داخل الكتلة، وأضاف سمات Ltail and Lead إلى كل حافة، وتحديد اسم الكتلة، وأضف "مركب" سمة المستوى الرسم البياني "= صحيح".

فيما يتعلق بالقلق من أن المرء قد يرغب في توصيل كتلة بدون عقد داخلها، فقد كان حلاي دائما إضافة عقدة إلى كل كتلة، المقدمة بأسلوب = نص استخدم هذه العقدة لتسمية الكتلة (بدلا من سمة "الملصقات" المضمنة في المجموعة، والتي يجب ضبطها على السلسلة الفارغة (في Python، label='""'). هذا يعني أنني لم أعد أضيف حواف تربط مجموعات مباشرة، لكنها تعمل في وضعي الخاص.

تأكد من أنك تستخدم fdp تخطيط للملف. لا أعتقد neato يدعم مجموعات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top