Tampilkan label sejajar dengan tepi saat menggunakan Graphviz

91

Saya menggunakan Graphviz 2.30. Penentuan posisi horizontal untuk label berhasil, tetapi dalam beberapa kasus, sudut yang dimodifikasi akan diinginkan.

Misalnya, saya mencoba berbagai nilai untuk sudut di sini tetapi tanpa efek apa pun:

ABB -> ABACUS[label="applied", fontname="Arial", fontsize=15, labelangle=110];

Bagaimana saya bisa menampilkan label sejalan dengan (yaitu sejajar) tepi saat menggunakan Graphviz digraph.

Keseluruhan digraphtidak akan diposting karena NDA. Selain itu, rotasi hanya akan diterapkan ke beberapa label.

Saya telah membaca utas serupa seperti ini atau lainnya (atau utas tentang penyelarasan misalnya) tetapi tanpa bantuan apa pun terkait masalah saya.

mnemonik
sumber
2
'labelangle' hanya berfungsi pada headlabel dan taillabel, selanjutnya tidak merotasi label, tetapi hanya menentukan (bersama-sama dengan labeldistance) di mana menempatkan label (yang masih berupa garis horizontal). Sudut 0 bergerak dari titik awal / akhir di sepanjang tepi. Dengan sudut +/- label dapat dicetak di atas atau di bawah tepi. Dengan jarak 0 sudut tanpa efek. Saya juga akan sangat tertarik untuk memutar label mengikuti tepinya, yang afaik masih belum terpecahkan.
bug313
1
Saya merasa tidak ada cara untuk melakukan ini. Tetapi karena ketiadaan fitur jarang didokumentasikan (ini akan menyebabkan jumlah dokumentasi yang tidak terbatas), sulit untuk menulis jawaban yang otoritatif tentang ini. Kecuali jika Anda dapat menunjukkan bahwa tidak ada penyebutan hal seperti ini di seluruh dokumentasi, atau di sudut yang tidak jelas dari basis kode.
bigblind
1
Elemen teks di Graphviz semuanya dibatasi dengan kotak biasa selama pemosisian. Algoritme berusaha sangat keras untuk menghindari melewati batas kotak ini selama penempatan tepi. Jika label dapat diputar, kotak-kotak ini akan menjadi jauh lebih besar sehingga menghasilkan tekanan yang besar pada area tampilan. Jika label dapat tumpang tindih dengan tepi atau node, label tersebut dapat diputar nanti di pipeline pencitraan.
Pekka
1
sebenarnya Anda dapat menemukannya di dokumentasi: github.com/ellson/graphviz/blob/master/doc/internal_todo.html "? - Izinkan teks pada suatu sudut"
MK.

Jawaban:

6

Menggunakan dot2latex memungkinkan Anda menentukan lblstyleatribut. Nilai lblstyledigunakan oleh PGF / TikZ dalam pembuatan pdf.

Seseorang dapat menentukan label paralel seperti ini:

digraph G {
    edge [lblstyle="above, sloped"];
    a -> b [label="ab"];
    b -> c [label="bc"];
    c -> a [label="ca"];
}

Untuk menghasilkan pdf

$ dot2tex --tikzedgelabel file.dot > file.tex
$ pdflatex file.tex

Hasilnya adalah

masukkan deskripsi gambar di sini

malbarbo.dll
sumber
Sayangnya Anda harus mengetahui sudut dari semua label saat membuat grafik; OP ingin menampilkan labelnya sejajar dengan tepi, pada sudut berapa pun tepi tersebut berada.
Galax
1
@Galax Terima kasih atas komentar Anda. Saya memperbaiki jawabannya.
malbarbo
Great ditemukan- itu adalah fitur praktis dari dot, saya tidak menyadarinya sebelumnya (atau mungkin ini baru).
Galax
-1

Edit: jawaban lain menemukan opsi yang sekarang ada untuk meratakan teks dengan tepi.

Pilihan terbaik Anda mungkin mengekspor grafik sebagai SVGdan menggunakan Illustratoratau Inkscapeuntuk menyempurnakannya. Ini hanya praktis saat menghasilkan beberapa grafik.

Saya sering harus men-tweak keluaran dari Graphvizdan Gephi; mereka memberi saya titik awal yang baik.

Galax
sumber