2011-09-24 28 views
7

Tôi muốn tạo một biểu đồ như hình bên dưới ... nhưng quá phức tạp. Tôi muốn sử dụng hình ảnh riêng biệt cho từng nút hình vuông và hình ảnh giống nhau cho mỗi nút tròn.Graphviz có phải là công cụ tốt nhất cho loại biểu đồ này không?

Tôi muốn biết liệu việc sử dụng GraphViz có phải là lựa chọn tốt nhất hoặc có bất kỳ tùy chọn nào khác không?

Ngoài ra, tôi muốn biết liệu tôi có thể tạo nút mẫu trong GraphViz cho hình tròn và sử dụng lại nó không? Tôi không muốn chỉ định các thuộc tính như hình ảnh, hình dạng, v.v ... một lần nữa.

Sample Graph

Trả lời

8

Graphviz hoàn toàn phù hợp với những gì bạn đang yêu cầu. Trang graphviz.org chính có vẻ như không hoạt động trong thời điểm này, nhưng ai đó đã làm hài lòng các ví dụ về thư viện (với nguồn) cho Flickr.

http://www.flickr.com/photos/kentbye/sets/72157601523153827/

Theo như tôi biết, bạn không thể tạo ra "mẫu", nhưng bạn có thể làm điều gì đó như thế này cho các vòng tròn:

node[shape=circle, color=white, style=solid]; 
node1;node2;node3; 

này sẽ xác định một nút (nghĩ về nó là "trạng thái" khi đánh giá tệp theo dòng) và sau đó bạn có thể xác định các nút vòng tròn của bạn trong "trạng thái" đó trước khi chuyển sang hình chữ nhật của bạn.

Tùy thuộc vào nền tảng của bạn, bạn cũng có thể nhập tệp .dot của mình và tinh chỉnh tệp để xuất bản. Ngoài ra còn có một số lượng lớn các máy phát điện và bộ chuyển đổi cho định dạng.

Hãy nhớ rằng, nếu bạn đang làm việc trên Mac OS X 10.7 "Sư tử", tôi chưa thể tìm thấy hoặc tạo phiên bản hoạt động của Graphviz. Trong trường hợp đó tôi sẽ nói nó chưa phù hợp với nhu cầu của bạn.

12

Chắc chắn, đây là mã để vẽ biểu đồ trong Câu hỏi của bạn (và được hiển thị bằng dấu chấm, bên dưới).

digraph g { 
rankdir = TB; 
bgcolor = white; 

edge[arrowsize=.7, color=black]; 
node[shape=box, color=black] 

{rank=same; a, b, c}; 
{rank=same; d, e, f}; 
{rank=same; g, h}; 
{rank=same; i, j, k}; 

d[color=blue; shape=circle]; 
e[color=blue; shape=circle]; 
k[color=blue; shape=circle]; 

a -> d; 
b -> d; 
b -> e; 
c -> e; 
d -> g; 
e -> h; 
d -> i; 
d -> j; 
j -> k; 
h -> k; 
k -> f; 
} 


  1. dòng đầu tiên digraph là dành cho đạo diễn đồ thị (đối với đồ thị trong mà các cạnh có một hướng).

  2. Vị trí thứ tư và thứ năm phía trên đặt thuộc tính mặc định cho cạnh và nút, tương ứng. Nói cách khác, một khi bạn đã thực hiện điều này, bạn chỉ cần cần phải tạo kiểu (bao gồm attribues + values) các nút (hoặc cạnh) mà bạn muốn tạo kiểu khác với giá trị mặc định. Bạn có thể có nhiều hơn một nút "mẫu" bằng cách tạo biểu đồ con hoặc rời rạc các nút nhóm (xem hướng dẫn sử dụng dấu chấm).

  3. rank = cùng cho phép bạn thể chỉ định một nhóm các nút có cùng vị trí thẳng đứng (với điều kiện rankdir được thiết lập để TB, điều này có nghĩa "từ trên xuống dưới").

  4. Theo mặc định, tên nút (ví dụ: a, b, c trong biểu đồ của tôi) được sử dụng làm nhãn của nút . Nếu bạn không muốn điều này thể hiện trong đồ thị dưới render, chỉ cần đặt label = ""

enter image description here

Các vấn đề liên quan