Untuk menjadikan hierarki Graphviz kelihatan seperti rangka berinden pada Mac anda, berikan setiap nod satu baris dan koordinat inden, kemudian paparkan dengan neato -n2. Ini mengekalkan sisi induk-anak sambil membolehkan anda mengawal susunan bacaan.
Panduan ini menghasilkan contoh enam nod dan mengeksport PDF. Sasarannya khusus: satu nod setiap baris, anak cucu muncul tepat di bawah induknya, dan nod pada kedalaman yang sama mempunyai inden yang sama. Graphviz mendokumenkan pemaparan dengan kedudukan tetap melalui pilihan baris perintah -n.
Mengapa pokok Graphviz biasa tidak kelihatan seperti rangka?
Hierarki menerangkan hubungan; rangka berinden turut menentukan urutan bacaan. Dalam contoh ini, akar mempunyai dua cabang, dan anak cucu cabang pertama mesti muncul sebelum cabang kedua. Urutan yang dikehendaki ialah:
Node R
Node A
Node C
Node D
Node B
Node E
Hubungan dalam graf ialah akar ke A, akar ke B, A ke C, A ke D dan B ke E. Tiada hubungan dari D ke B semata-mata kerana B muncul pada baris seterusnya. DOT menyatakan sisi berarah menggunakan operator ->; pengisytiharan nod dan atribut persembahannya ialah bahagian bahasa yang berasingan. Lihat rujukan Bahasa DOT rasmi.
Enjin dot Graphviz menghasilkan lukisan hierarki atau berlapis. Enjin ini menghalakan sisi ke arah yang sama sambil cuba mengurangkan persilangan dan panjang sisi. Matlamat itu sesuai untuk rajah bercabang, tetapi tidak menentukan rangka satu nod setiap baris seperti di atas. Lihat dokumentasi susun atur dot.
Beberapa atribut yang lazim digunakan hanya menangani sebahagian masalah:
| Tetapan | Tujuan yang didokumenkan | Perkara yang masih belum ditentukan |
|---|---|---|
rankdir=LR |
Mengubah arah susun atur menjadi dari kiri ke kanan | Tidak menentukan urutan rangka menegak |
rank=same |
Meletakkan nod subgraf pada pangkat yang sama | Tidak menetapkan baris rangka tersendiri untuk setiap nod |
ordering=out |
Mengehadkan sisi keluar supaya muncul dari kiri ke kanan mengikut urutan input | Tidak menentukan inden berdasarkan kedalaman dan koordinat baris |
Batasan ini selaras dengan rujukan rasmi untuk rankdir, rank dan ordering. Untuk susunan baris khusus dalam artikel ini, koordinat eksplisit memberikan pembinaan yang lebih langsung berbanding menggabungkan atribut tersebut.
Bagaimanakah anda menyediakan Graphviz pada Mac?
Buka Terminal. Jika anda sudah menggunakan Homebrew, pasang Graphviz dengan arahan berikut. Halaman muat turun Graphviz rasmi menyenaraikan kaedah pemasangan Mac ini:
brew install graphviz
Jika anda menggunakan MacPorts, halaman muat turun yang sama menyenaraikan sudo port install graphviz. Pilih pengurus pakej yang sedia anda gunakan. Jika kedua-duanya belum dipasang, ikuti pautan pemasangan yang berkaitan pada halaman itu sebelum kembali kepada panduan ini.
Semak sama ada pemapar tersedia:
neato -V
Pilihan -V mencetak maklumat versi Graphviz. Simpan versi yang dilaporkan apabila membandingkan hasil antara komputer; anda tidak memerlukan nombor versi tertentu yang dicetak dalam artikel ini. Graphviz mendokumenkan pilihan ini dalam rujukan Baris Perintah.
Bagaimanakah anda mencipta hierarki berinden?
Blok shell lengkap berikut mencipta folder kerja baharu dan menulis fail DOT di situ. Jalankannya dalam Terminal; laluan folder akan dicetak apabila proses selesai. Pembatas heredok bertanda petik mengekalkan teks DOT seperti yang ditulis.
outline_dir=$(mktemp -d "$HOME/graphviz-outline.XXXXXX")
if [ -n "$outline_dir" ] && cd "$outline_dir"; then
cat > hierarchy.dot <<'DOT'
digraph Hierarchy {
graph [splines=ortho, bgcolor=white];
node [
shape=box,
width=1.2,
height=0.35,
fixedsize=true,
fontname="Courier",
fontsize=12
];
r [label="Node R", pos="100,300"];
a [label="Node A", pos="136,252"];
c [label="Node C", pos="172,204"];
d [label="Node D", pos="172,156"];
b [label="Node B", pos="136,108"];
e [label="Node E", pos="172,60"];
r -> a;
r -> b;
a -> c;
a -> d;
b -> e;
}
DOT
pwd
fi
Kedudukan nod membentuk rangka. Setiap baris seterusnya turun sebanyak 48 poin, dan setiap pertambahan kedalaman bergerak ke kanan sebanyak 36 poin. Nombor ini ialah pilihan jarak untuk ilustrasi, bukan nilai lalai Graphviz. Dokumentasi pos menyatakan bahawa kedudukan nod merujuk kepada pusat nod dan neato mentafsir kedudukan sebagai poin apabila digunakan bersama -n.
| Nod | Kedalaman | Baris, bermula dari sifar | Kedudukan pusat |
|---|---|---|---|
| Node R | 0 | 0 | 100,300 |
| Node A | 1 | 1 | 136,252 |
| Node C | 2 | 2 | 172,204 |
| Node D | 2 | 3 | 172,156 |
| Node B | 1 | 4 | 136,108 |
| Node E | 2 | 5 | 172,60 |
Bagi pembinaan ini, peraturan koordinat ialah x = 100 + 36 × depth dan y = 300 − 48 × row. Perhatikan peralihan daripada Node D ke Node B: baris bertambah, tetapi kedalaman berkurang. Peralihan tunggal itulah yang menjadikan lukisan kelihatan seperti rangka dan bukannya rantaian.
Semua kotak mempunyai dimensi yang sama, jadi koordinat pusat yang sama turut menjajarkan tepi kirinya. Label sintetik yang sama panjang memudahkan perbandingan kedudukan teks. Dengan fixedsize=true, Graphviz menggunakan dimensi nod yang ditentukan dan bukannya membesarkan kotak agar muat dengan kandungannya; label yang terlalu besar akan menghasilkan amaran. Lihat rujukan fixedsize.
Bagaimanakah anda memaparkan dan memeriksa hasilnya?
Dalam sesi Terminal dan folder kerja yang sama, jalankan:
neato -n2 -Tpdf hierarchy.dot -o hierarchy.pdf
Di sini, -n2 mengekalkan susunan nod yang dibekalkan tanpa pelarasan pertindihan dan mengira laluan untuk sisi yang tidak mempunyai kedudukan tersendiri. Oleh itu, setiap nod memerlukan nilai pos. Pilihan -Tpdf dan -o memilih output PDF dan destinasinya. Tingkah laku ini didokumenkan dalam rujukan Baris Perintah.
Buka folder kerja dalam Finder dan buka hierarchy.pdf. Output PDF memerlukan binaan Graphviz yang menyertakan pemapar Cairo, seperti yang dinyatakan pada halaman output PDF Graphviz. Contoh ini telah disemak berdasarkan dokumentasi, tetapi belum diuji pemaparannya di sini kerana Graphviz tidak tersedia dalam persekitaran penyelidikan.
Periksa tiga perkara secara berasingan:
- Baca ke bawah: R, A, C, D, B, E sepatutnya mengisi baris berturutan.
- Bandingkan inden: A dan B sepatutnya sejajar; C, D dan E sepatutnya sejajar satu langkah lebih ke kanan.
- Jejaki hubungan: R bersambung kepada A dan B; A bersambung kepada C dan D; B bersambung kepada E.
Dua pemeriksaan pertama menilai pembinaan koordinat. Pemeriksaan ketiga menyemak graf sebenar. Mengasingkan pemeriksaan ini membantu mengesan rajah yang kelihatan teratur tetapi mempunyai sisi induk-anak yang salah.
Adakah penyambungnya akan kelihatan sama seperti pokok dalam pelayar fail?
Baris dan inden nod ditentukan secara eksplisit; laluan penyambung masih dikira secara automatik. Contoh ini meminta splines=ortho, yang merutekan sisi melalui segmen sejajar paksi. Dokumentasi Graphviz juga menyatakan bahawa penghalaan ini tidak mengendalikan port, jadi menambah port kompas bukan cara yang didokumenkan untuk memaksa corak siku tertentu. Lihat rujukan splines.
Oleh itu, pembinaan ini menghasilkan hierarki berinden dengan penyambung bersudut tegak yang dirutekan secara automatik. Ia tidak menetapkan satu rel menegak bersama dengan titik percabangan yang diletakkan secara tepat. Jika geometri penyambung itu penting, pembinaan tambahan dengan laluan sisi yang ditentukan secara eksplisit diperlukan; splines=ortho sahaja tidak menyatakan keperluan itu.
Untuk rangka yang kemas tanpa penyambung yang kelihatan, ubah tetapan graf kepada splines=none dan paparkan semula. Fail DOT masih mengandungi sisi induk-anaknya, sementara pemapar menggugurkan garis sisi tersebut. Ini ialah pilihan pemaparan yang didokumenkan dalam rujukan splines yang sama.
Bagaimanakah anda mengubah suai contoh tanpa mengubah maknanya?
Mulakan dengan menulis urutan bacaan yang dikehendaki secara berasingan daripada senarai sisi. Kunjungi induk dahulu, kemudian anak pertamanya serta anak cucunya, sebelum beralih kepada anak seterusnya. Tetapkan satu baris kepada setiap nod dalam urutan itu. Kemudian tetapkan inden berdasarkan kedalaman.
Sebagai contoh, untuk menambah satu lagi anak di bawah Node A selepas Node D, masukkannya dalam urutan bacaan sebelum Node B. Berikan kedalaman dua kepadanya, anjak baris seterusnya ke bawah, dan tambah satu sisi dari A ke nod baharu itu. Hubungan induk yang sedia ada tidak berubah hanya kerana nombor barisnya berubah.
Gunakan urutan diagnosis berikut apabila versi yang telah disunting kelihatan salah:
- Lukisan tersebar dalam susunan yang berbeza: pastikan arahan masih menggunakan
neato -n2. Contoh ini bergantung pada kedudukan yang dibekalkan dan bukannya susun atur automatik biasa. - Pemaparan melaporkan kedudukan yang hilang: semak setiap ID nod, termasuk ID yang hanya disebut dalam pernyataan sisi. Setiap nod memerlukan pengisytiharan berkedudukan untuk aliran kerja ini.
- Label terkeluar daripada kotaknya: besarkan dimensi kotak yang seragam atau pendekkan label. Kotak bersaiz tetap tidak membesar secara automatik.
- Baris bertindih selepas kotak dibesarkan: tambah jarak antara baris. Mod pemaparan yang dipilih mengekalkan kedudukan dan bukannya membetulkan pertindihan.
- Cabang bersambung kepada nod yang salah: betulkan pernyataan sisi. Mengalihkan kotak tidak dapat membaiki hubungan yang salah.
Keadaan kedudukan yang hilang dan pertindihan selaras dengan tingkah laku -n2 yang didokumenkan Graphviz; keadaan label pula selaras dengan tingkah laku fixedsize. Menambah jarak ialah pelarasan reka bentuk yang sewajarnya bagi contoh yang diletakkan secara manual ini.
Jadikan senarai sisi hierarki sebagai sumber hubungan dan jadual koordinat sebagai sumber persembahan. Bagi rajah desktop Mac yang kecil, pemisahan ini memudahkan penyelenggaraan hasil: ubah sisi apabila hierarki berubah, ubah baris apabila urutan bacaan berubah, dan ubah jarak apabila label memerlukan lebih banyak ruang.
Sumber
- Bahasa DOT — Graphviz
- dot — Graphviz
- rankdir — Graphviz
- rank — Graphviz
- ordering — Graphviz
- Muat turun — Graphviz
- Baris Perintah — Graphviz
- pos — Graphviz
- fixedsize — Graphviz
- PDF — Graphviz
- splines — Graphviz