2009-09-14 22 views
6

Tôi hiện đang sử dụng Jung để vẽ đồ thị (tôi thực sự có nghĩa là đồ thị không phải biểu đồ!). Vấn đề là các Nhãn Vertex và Edge được chồng chéo với các đỉnh và các cạnh. Điều này dẫn đến đồ thị tìm kiếm kỳ lạ. Vấn đề không bị ràng buộc với một thuật toán bố cục cụ thể (mặc dù tôi đã sử dụng FRLayout).JUNG (Đồ thị Java): Làm thế nào để ngăn các nhãn Vertex và Edge bị trùng lặp?

Có khả năng nào để cho JUNG biết để ngăn chặn những sự chồng chéo này không? Tôi hy vọng điều này đã được triển khai và vấn đề duy nhất là tìm các tùy chọn phù hợp!

Trả lời

5

(Câu trả lời sau giả định Jung2; Tôi không quen với tiền tố Jung2).

Một trong những điểm mạnh của Jung là nó rất dễ mở rộng và dễ dàng mở rộng. Jung cho phép bạn cắm các máy biến áp khác nhau (các thuộc tính dựng hình đơn giản), bộ kết xuất (hiển thị phức tạp hơn), v.v., để tùy chỉnh hành vi khi mặc định không hoàn toàn đúng. Đây là những thường được cài đặt trên RenderContext (mà bạn có thể nhận được từ VisualizationViewer của bạn).

Mặt khác, nhược điểm của nó là sự phức tạp và thiếu tài liệu phong nha. Nếu bạn định thực hiện bất kỳ tùy chỉnh vừa phải đến nặng nào, bạn sẽ cần đào sâu vào nguồn Jung.

Ví dụ: hiển thị nhãn đỉnh có thể được tùy chỉnh bằng cách cắm vào trình kết xuất nhãn đỉnh mới (giao diện Renderer.VertexLabel). Ví dụ: bạn có thể khởi tạo BasicVertexLabelRenderer và chỉ định một vị trí khác (phía bắc, phía tây, giữa, v.v.). Bạn có thể đặt nhãn của bạn ở trung tâm, nếu bạn sẵn sàng thay đổi hình dạng thành một cái gì đó lớn hơn vòng tròn đó (để làm như vậy, hãy cài đặt biến áp hình dạng đỉnh của riêng bạn - một thể hiện của Biến áp). Ngoài ra, bạn có thể tạo triển khai tùy chỉnh của riêng mình cho giao diện này, hiển thị nền dưới văn bản nhãn.

Bạn cũng có thể cài đặt phiên bản tinh chỉnh của riêng Renderer.EdgeLabel (xem BasicEdgeLabelRenderer của Jung) để tùy chỉnh vị trí của nhãn cạnh.

2

Tôi nghĩ đây chỉ là cách nó được triển khai, các tác giả của mã có thể không coi đó là vấn đề. Thư viện JUNG là mã nguồn mở, do đó bạn được hoan nghênh thay đổi nó khi bạn thấy phù hợp.

Nếu bạn không muốn thay đổi mã, sửa chữa dễ dàng để làm cho nhãn dễ đọc hơn là chỉ cần thay đổi màu của nhãn, để chúng khác với các cạnh.

6

bằng cách này, nếu bạn muốn thay đổi màu sắc, lúc đầu nó có vẻ là một nỗi đau lớn. nhưng gần đây tôi phát hiện ra thủ thuật này ít:

Transformer labelTransformer = new ChainedTransformer<String,String>(new Transformer[]{ 
      new ToStringLabeller<String>(), 
      new Transformer<String,String>() { 
      public String transform(String input) { 
       return "<html><font color=\"yellow\">"+input; 
      }}}); 

context.setVertexLabelTransformer(labelTransformer); 
+3

Bạn có biết nơi sử dụng HTML này được ghi trong JUNG hay không. Nói cách khác, khả năng và những hạn chế của việc sử dụng HTML trong JUNG là gì? – madewael

7

Bạn chỉ cần thiết lập các nhãn offset:

vv.getRenderContext().setLabelOffset(20); 

đâu câuVisualizationViewer đối tượng của bạn.

1

Tôi đã gặp phải vấn đề tương tự của Nhãn cạnh bị chồng chéo. Một giải pháp nhanh chóng và dơ bẩn mà tôi đã sử dụng để định vị các nhãn cạnh là bằng cách đệm một chiều dài nhất định với khoảng trắng trong giá trị chuỗi.

//pad some white spaces to value of edge when adding edges to the graph 
graph.addEdge(String.format("%-35s", "Edge-A"), 1, 2); 

Nó sẽ tránh các nhãn cạnh bị che khuất và chồng chéo ở giữa, đặc biệt khi xây dựng biểu đồ hai bên. Hy vọng điều này sẽ giúp một số bạn ra khỏi đó!

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