Tôi hiện đang viết một thư viện đồ thị trong Java và tôi muốn một công cụ trực quan hóa một số biểu đồ. Tôi đã phát hiện ra Graph-viz, điều này xảy ra là một cách tuyệt vời - mặc dù có lỗi khi làm điều này.Graphviz (xdot): Làm thế nào để tạo các nút đệ quy?
Trong mô hình của tôi, Đồ thị được cấu tạo của Nodes và Edges. Mỗi Node có một số lượng nhất định cổng (I/O/IO) và Edges liên kết những cổng với nhau. Một số nút đặc biệt được gọi là Đồ thị và nhúng Biểu đồ. Các số Cổng trong số này Đồ thị được ánh xạ tới một số Cổng của nội bộ Nút.
Tôi muốn cung cấp một số đại diện. Việc đầu tiên của họ, mà tôi hài lòng, là như sau: http://i.stack.imgur.com/ujU71.png
Các đầu vào cổng được trình bày trong xanh, những cái đầu ra màu đỏ, và những cái đầu vào-đầu ra màu xanh lam.
Trong đại diện này, Đồ thị không được mở rộng và được hiển thị đơn giản như Nút. Trong phiên bản thứ hai, tôi muốn tạo một thứ gì đó giống như hình sau: http://i.stack.imgur.com/Cx624.png
Vấn đề là tôi không thể tạo một biểu đồ con (cụm) với các khu vực cố định (dường như không phải là khả thi). Một giải pháp khác mà tôi đã thử là nhúng biểu đồ vào một nút. Tuy nhiên, chèn một số mã vào <td> </td>
một phần của một nhãn HTML không đánh giá mã:
digraph graph0
{
node1
[
label =
<
<table border="0" cellspacing="0">
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td bgcolor="palegreen" border="1" port="port2">port2</td>
<td bgcolor="palegreen" border="1" port="port3">port3</td>
</tr>
</table>
</td>
</tr>
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td bgcolor="skyblue" border="1" port="port5">port5</td>
</tr>
</table>
</td>
<td bgcolor="peachpuff" border="1">
subgraph clusterTest
{
nodeTest
}
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td bgcolor="lightpink" border="1" port="port4">port4</td>
</tr>
</table>
</td>
</tr>
</table>
>
style = "invisible"
]
}
Đoạn mã trên tạo ra các đồ thị dưới đây: http://i.stack.imgur.com/E9jQ1.png
Cuối cùng, giải pháp tốt nhất mà tôi có thể đưa ra là như sau: http://i.stack.imgur.com/VzS5g.png
Tuy nhiên tôi không hài lòng với nó, vì GraphNodes 'cổng được đặt tại các địa điểm kỳ lạ đôi khi.
Bạn có biết cách tôi có thể tiếp cận bố cục biểu đồ mục tiêu không? Vui lòng yêu cầu bất kỳ thông tin nào khác nếu cần.
EDIT: Tôi vẫn không tìm thấy giải pháp nào. Một cách để xử lý điều này là có thể sửa vị trí của các nút đã cho bên trong cụm chứa, nhưng có vẻ như không thể thực hiện với bố cục "chấm". Bất kỳ ý tưởng ?
Tôi đang bỏ điều này trong lòng của bạn, bởi vì tôi phải chạy ngay bây giờ. Hãy cho tôi biết nếu có câu hỏi (chi tiết) tôi có thể thêm vào câu trả lời ... –
Xin chào! Cảm ơn câu trả lời của bạn, xin lỗi tôi không thể kiểm tra nó trước. Tuy nhiên tôi không thể quản lý để làm cho nó chạy. Có vẻ như Python đang thất bại trên thuộc tính retreiving 'width'. Bạn sử dụng phiên bản Xdot nào để hình ảnh hóa nó (của tôi là 0,4)? Hoặc mềm khác? Dù sao, câu trả lời của bạn trông hoàn hảo với tôi! –
Tôi trả lại trực tiếp với graphviz. dot - graphviz phiên bản 2.26.3 –