Dalam DOT
bahasa untuk GraphViz
, saya mencoba mewakili diagram ketergantungan. Saya harus dapat memiliki simpul di dalam wadah dan untuk dapat membuat simpul dan / atau wadah tergantung pada simpul dan / atau wadah lain.
Saya menggunakan subgraph
untuk mewakili wadah saya. Menghubungkan node berfungsi dengan baik, tapi saya tidak tahu bagaimana menghubungkan subgraph.
Dengan adanya program di bawah ini, saya harus dapat terhubung cluster_1
dan cluster_2
dengan panah, tetapi apa pun yang saya coba buat membuat simpul baru alih-alih menghubungkan kluster:
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";
}
fdp
. Contoh yang ditautkan, dan yang di atas keduanya berfungsi (baris terakhir dalam contoh di sini perlu menggunakan nama subgraph bukan label dan mungkin lebih baik untuk memasukkan panjang garis untuk grafik); ini sedikit ketat seperti).fdp
v2.28.0 dan menyalin / menempelkan sumber dari contoh, garis-garis terhubung ke tengah subgraph, bukan ke tepi. Jika Anda membuka .dot di OmniGraffle mereka terhubung dengan benar, sementaraneato
dandot
keduanya membuat node berlebihan untuk cluster.Jawaban:
Manual pengguna DOT memberikan contoh berikut grafik dengan kluster dengan tepi di antara kluster:
... dan tepi antara node dan cluster:
sumber
DUMMY_0 [shape=point style=invis]
Untuk kemudahan referensi solusi yang dijelaskan dalam jawaban HighPerformanceMark, diterapkan langsung ke pertanyaan awal, terlihat seperti ini:
The
compound=true
dalamgraph
deklarasi sangat penting. Itu menghasilkan output:Perhatikan bahwa saya mengubah tepi ke node referensi di dalam kluster, menambahkan atribut ltail dan lhead ke setiap tepi, menentukan nama cluster, dan menambahkan atribut tingkat-grafik 'compound = true'.
Mengenai kekhawatiran bahwa seseorang mungkin ingin menghubungkan sebuah cluster tanpa node di dalamnya, solusi saya adalah untuk selalu menambahkan node ke setiap cluster, diterjemahkan dengan style = plaintext. Gunakan simpul ini untuk memberi label pada kluster (alih-alih atribut "label" bawaan kluster, yang harus ditetapkan ke string kosong (dengan Python,
label='""'
). Ini berarti saya tidak lagi menambahkan tepi yang menghubungkan kluster secara langsung, tetapi bekerja dalam situasi khusus saya.sumber
cluster_0 -> cluster_1
hadir sebagai output Anda. Karena mungkin ada banyak item di cluster_0 tautan ke banyak item lain di cluster_1 (banyak ke banyak atau satu ke banyak). Akan bagus untuk hanya menghubungkan dua.Pastikan Anda menggunakan
fdp
tata letak untuk file tersebut. Saya tidak berpikirneato
mendukung cluster.sumber
neato
mesin tidak mendukung cluster .. Saya tidak yakin apakah ini bug atau tidak ..