2009-09-14 3 views
6

나는 그래프를 그리는 데 현재 Jung을 사용하고 있습니다. (차트가 아니라 그래프를 의미합니다!). 문제는 꼭지점 및 가장자리 레이블이 꼭지점 및 가장자리와 중첩되어 있다는 것입니다. 이것은 이상한보고있는 그래프로 이어집니다. 문제는 특정 레이아웃 알고리즘에 바인딩되지 않습니다 (FRLayout을 사용하고 있지만).JUNG (Java Graph) : Vertex와 Edge-Labels가 겹치지 않게하는 방법은 무엇입니까?

JUNG에게 이러한 중복을 방지 할 수있는 방법이 있습니까? 나는 이것이 이미 구현되어 있고 유일한 문제는 올바른 선택을 찾는 것입니다!

답변

5

(다음 정답은 정 2를 전제로하며 전정 2에 익숙하지 않습니다.)

정의 강점 중 하나는 매우 확장 가능하고 쉽게 확장된다는 것입니다. Jung은 다양한 변압기 (간단한 렌더링 속성), 렌더러 (보다 복잡한 렌더링) 등을 플러그인하여 기본값이 올바르지 않은 경우 동작을 사용자 지정할 수 있도록합니다. 이들은 일반적으로 RenderContext (VisualizationViewer에서 얻을 수 있음)에 설치됩니다.

측면에서 보면 단점은 복잡하고 적절한 문서가 부족하다는 것입니다. 중형 내지 대규모 사용자 정의를 수행하려면 Jung 소스를 파헤쳐 야합니다.

예를 들어 새로운 정점 레이블 렌더러 (Renderer.VertexLabel 인터페이스)를 연결하여 정점 레이블 렌더링을 사용자 정의 할 수 있습니다. 예를 들어, BasicVertexLabelRenderer를 인스턴스화하고 다른 위치 (북쪽, 서쪽, 중심 등)를 지정할 수 있습니다. 원 모양보다 큰 모양으로 모양을 변경하려는 경우 레이블을 중앙에 놓을 수 있습니다 (이렇게하려면 변형 점의 인스턴스 인 자체 꼭지점 모양 변환기를 설치하십시오). 또는 레이블 텍스트 아래에 배경을 렌더링하는이 인터페이스의 사용자 정의 구현을 만들 수 있습니다.

Renderer.EdgeLabel (Jung의 BasicEdgeLabelRenderer 참조)의 변형 된 버전을 설치하여 가장자리 레이블의 위치를 ​​사용자 정의 할 수도 있습니다.

2

저는 이것이 구현 된 방법이라고 생각합니다. 코드 작성자는 문제의 것으로 보지 않을 것입니다. JUNG 라이브러리는 오픈 소스이므로 적합하다고 생각되면 변경하실 수 있습니다.

레이블을 쉽게 읽을 수 있도록 코드를 변경하지 않으려면 레이블의 색을 변경하여 가장자리와 다르게 지정하면됩니다.

6

그런데 색상을 변경하려면 먼저 큰 고통이있는 것으로 보입니다. 당신은 단지 오프셋 라벨을 설정해야

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

이 HTML 사용이 JUNG에 어디에 기록되어 있는지 알고 계십니까? 다시 말해 JUNG에서 HTML을 사용할 때의 가능성과 한계는 무엇입니까? – madewael

7

:

vv.getRenderContext().setLabelOffset(20); 

VisualizationViewer 객체이다 그러나 나는 최근에 약간의 트릭을 발견했다.

1

겹쳐진 동일한 가장자리 라벨 문제가 발생했습니다. 가장자리 레이블의 위치를 ​​지정하는 데 사용 된 빠르고 더러운 솔루션은 문자열 값에 공백이있는 특정 길이를 채우는 것입니다.

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

특히 이분 그래프를 작성할 때 가장자리 레이블이 중앙에서 흐려지고 겹쳐지는 것을 방지 할 수 있습니다. 이것이 당신을 도와 줄 수 있기를 바랍니다.