গ্রাফভিজ - উপগ্রহগুলি কীভাবে সংযুক্ত করবেন?


166

এর 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";
}

এখানে চিত্র বর্ণনা লিখুন


2
আমারও একই সমস্যা হচ্ছে, তবুও তাদের একটি প্রাকৃতিক উদাহরণ রয়েছে যেখানে সাবগ্রাফ্টগুলি নোডের মতো কাজ করছে, গ্রাফভিজ.আর । / কনটেন্ট / এফডি ক্লকাস্ট
nulucaroni

1
@nlucaroni আমি ভাবছি যদি এই সমস্যাটির সমাধান হয়। এই উদাহরণটি আমাকে ভুল গ্রাফ দেয়: প্রান্তগুলি উপগ্রহের কেন্দ্রগুলিকে সংযুক্ত করে। আপনি উদাহরণস্বরূপ এটি কাজ করতে কিভাবে জানেন না?
102

1
@ k102, আমি জানি। সেই পৃষ্ঠাটি আবার দেখুন; এটি আপনাকে ব্যবহার করা প্রয়োজন বলে fdp। লিঙ্কযুক্ত উদাহরণ এবং উভয়ের উপরে একটি কাজ করে (উদাহরণের শেষ পংক্তির এখানে সাবগ্রাফের নামগুলি লেবেল ব্যবহার করা উচিত নয় এবং গ্রাফের জন্য লাইন দৈর্ঘ্য অন্তর্ভুক্ত করা ভাল হতে পারে); এটি যেমন আছে তেমন কিছুটা শক্ত)।
nlucaroni

1
@nlucaroni v2.28.0 ব্যবহার করে fdpএবং উত্সটিকে অনুলিপি / আটকানো উদাহরণ থেকে লাইনগুলি অনুচ্ছেদের কেন্দ্রে সংযুক্ত হয়েছে, কিনারা নয়। যদি আপনি ওমনিগ্রাফলে .ডট খুলেন তবে সেগুলি সঠিকভাবে সংযুক্ত রয়েছে, neatoএবং dotউভয়ই ক্লাস্টারের জন্য অতিমাত্রায় নোড তৈরি করে।
ফ্রোগজ

উত্তর:


190

ডট ব্যবহারকারী ম্যানুয়ালটি ক্লাস্টারগুলির মধ্যে প্রান্তযুক্ত ক্লাস্টারগুলির সাথে একটি গ্রাফের নিম্নলিখিত উদাহরণ দেয়:

গুরুত্বপূর্ণ: প্রাথমিক compound=trueবিবৃতি আবশ্যক।

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;
}

... এবং নোড এবং ক্লাস্টারের মধ্যে প্রান্ত:

এখানে চিত্র বর্ণনা লিখুন


14
ধন্যবাদ - যে কাজ করে, তবে এটি সত্যিই কুৎসিত হ্যাকের মতো অনুভূত হয়। আমি আশা করছি আমার এমন কোনও দৃশ্যের মুখোমুখি হবে না যেখানে আমার কাছে কোনও নোড নেই
উইনস্টন স্মিথ

5
যদি কেউ আগ্রহী হন তবে এটি আপনার অবস্থান সম্পর্কিত সমস্যা তৈরি করতে পারে যদি আপনার কাছে লিঙ্কযুক্ত (প্রান্তগুলি) লেবেল থাকে। মাথা বা প্রান্তের লেজটি একটি গুচ্ছের নীচে লুকানো থাকতে পারে, লেবেলটি এখনও মাঝপয়েন্টে অবস্থিত, যার অর্থ কিছু প্রান্তের লেবেল প্রান্তটি নিজেই অবস্থানের পরিবর্তে একটি গুচ্ছের উপর ভাসছে।
উইনস্টন স্মিথ

58
@ উইনস্টনস্মিথ: পুরানো প্রশ্ন, তবে আমার একই সমস্যা ছিল এবং এটি ক্লাস্টারের প্রতি একটি অদৃশ্য ডামি নোড দিয়ে সমাধান করেছি, যা অন্যথায় গোষ্ঠীটি খালি থাকলেও এর সাথে যুক্ত হতে পারে। DUMMY_0 [shape=point style=invis]
দেবসোলার

2
কেবল উল্লম্বভাবে সংযুক্ত ক্লাস্টার ব্যবহার করার সময় আমি আমার আন্ত-ক্লাস্টার প্রান্তগুলি কেবল তীরের মাথাগুলিতে সঙ্কুচিত হতে দেখেছি। আমি প্রান্তে minlen = 1 দিয়ে এটি স্থির করেছি । c -> g [ltail = cluster0, lhead = cluster1, minlen = 1];
ফ্রেইনার্ড

3
উদাহরণ সহ ম্যানুয়ালটির লিঙ্কটি এখানে রয়েছে: গ্রাফভিজ.আর / ডকুমেন্টেশন / ডটগাইড.পিডিএফ (পৃষ্ঠা 30)।
কিরিল বুলিগিন

90

সহজেই রেফারেন্সের জন্য হাই পারফরম্যান্সমার্কের উত্তরে বর্ণিত সমাধানটি মূল প্রশ্নের সাথে সরাসরি প্রয়োগ করা হয়, এটি দেখতে এরকম দেখাচ্ছে:

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ঘোষণা অত্যাবশ্যক। এটি আউটপুট উত্পাদন করে:

সংযুক্ত ক্লাস্টারগুলির সাথে গ্রাফ

নোট করুন যে আমি ক্লাস্টারের মধ্যে রেফারেন্স নোডগুলিতে প্রান্তগুলি পরিবর্তন করেছি, ক্লাস্টারের নাম উল্লেখ করে প্রতিটি প্রান্তে ltail এবং lhead বৈশিষ্ট্য যুক্ত করেছি এবং গ্রাফ-স্তর বৈশিষ্ট্যটি 'যৌগিক = সত্য' যুক্ত করেছি।

কোনও ক্লাস্টারের অভ্যন্তরে কোনও নোড ছাড়া সংযোগ স্থাপন করতে চাইলে এই উদ্বেগের বিষয়ে, আমার সমাধানটি সর্বদা প্রতিটি ক্লাস্টারে একটি নোড যুক্ত করতে হবে, এটি স্টাইল = প্লেইন টেক্সট দিয়ে রেন্ডার করা হয়েছে। ক্লাস্টারের লেবেল করতে এই নোডটি ব্যবহার করুন (ক্লাস্টারের অন্তর্নির্মিত "লেবেল" অ্যাট্রিবিউটের পরিবর্তে, যা খালি স্ট্রিংয়ে সেট করা উচিত (পাইথন-এ label='""') Thisএর অর্থ আমি আর প্রান্তগুলি যুক্ত করব না যা ক্লাস্টারগুলিকে সরাসরি সংযুক্ত করে, তবে এটি আমার বিশেষ পরিস্থিতিতে কাজ করে।


24
দ্রষ্টব্য: 'গ্রাফ [ফন্টসাইজ = 10 ফন্টনাম = "ভার্দানা" যৌগিক = সত্য];' অপরিহার্য - আপনি যদি মিস করেন যে ltail / lhead এর সাথে লিঙ্ক করা কাজ করে না।
এস ডানিয়েল

1
@ জোনাথন হার্টলি, আপনার শেষ অনুচ্ছেদ অনুসারে গুচ্ছের ঠিক মাঝখানে নোডকে কেন্দ্র করার কোনও উপায় আছে কি?
পেসারিয়ার

এছাড়াও গুচ্ছের নামটি মূল চিঠি দিয়ে শুরু করা উচিত নয়
জেসিএলএল

7
@ s.Daniel এটি ঠিক যৌগিক = সত্য; যা প্রয়োজনীয়
ডাঃ ম্যাক্স ভেল্কেল

"আইটেম 1" -> "আইটেম 3" লিঙ্ক করার সময় মাথায় এবং লেটেলটিকে পুনরায় সেট করার পরিবর্তে, আমি কীভাবে ক্লাস্টার_0 এবং ক্লাস্টার_1 কে অর্থসূচক কোডের সাথে সংযুক্ত করব? আমি মীম, cluster_0 -> cluster_1আপনি আউটপুট হিসাবে উপস্থিত। কারণ ক্লাস্টার টিতে অনেক আইটেম থাকতে পারে ক্লাস্টার_1 এ অন্যান্য অনেক আইটেমের লিঙ্ক (অনেকের কাছে অনেকের কাছে বা একের অনেকের কাছে)। দু'জনের সাথে লিঙ্ক করা ভাল হবে।
মিথিল

11

নিশ্চিত করুন যে আপনি fdpফাইলটির জন্য লেআউট ব্যবহার করছেন। আমি মনে করি না গ্রুপগুলি neatoসমর্থন করে।


2
আমিও পরীক্ষামূলকভাবে দেখেছি যে neatoইঞ্জিন ক্লাস্টারগুলিকে সমর্থন করে না .. আমি নিশ্চিত নই যে এটি কোনও বাগ কিনা বা না ..
রস রজার্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.