簡體   English   中英

JUNG(Java Graph):如何防止頂點和邊緣標簽重疊?

[英]JUNG (Java Graph): How to prevent Vertex- and Edge-Labels from overlapping?

我目前正在使用Jung繪制圖形(我的意思是圖形而不是圖表!)。 問題是頂點和邊緣標簽與頂點和邊緣重疊。 這會導致奇怪的圖形。 問題不受特定布局算法的約束(盡管我一直在使用FRLayout)。

有沒有可能告訴JUNG防止這些重疊? 我希望這已經實施,唯一的問題是找到合適的選擇!

您只需要設置標簽偏移量:

vv.getRenderContext().setLabelOffset(20);

其中vv是您的VisualizationViewer對象。

順便說一句,如果你想改變顏色,起初它似乎是一個主要的痛苦。 但我最近發現了這個小技巧:

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);

(以下答案假定Jung2;我不熟悉Jung2之前)。

Jung的優勢之一是它非常易於擴展,並且易於擴展。 Jung允許您插入各種變換器(簡單渲染屬性),渲染器(更復雜的渲染)等等,以在默認設置不正確時自定義行為。 這些通常安裝在RenderContext上(您可以從VisualizationViewer獲取)。

另一方面,它的缺點是它的復雜性和缺乏體面的文檔。 如果您要進行任何中等到重度的定制,您需要深入了解Jung來源。

例如,可以通過插入新的頂點標簽渲染器(Renderer.VertexLabel接口)來自定義頂點標簽渲染。 例如,您可以實例化BasicVertexLabelRenderer並指定其他位置(北,西,中等)。 如果您願意將形狀更改為大於該圓形的東西(為此,請安裝您自己的頂點形狀變換器 - 變換器的一個實例),您可以將標簽放在中心。 或者,您可以創建自己的此接口自定義實現,在標簽文本下呈現背景。

您還可以安裝自己的Renderer.EdgeLabel調整版本(請參閱Jung的BasicEdgeLabelRenderer)來自定義邊緣標簽的位置。

我認為這只是它的實現方式,代碼的作者可能不認為它是一個問題。 JUNG庫是開源的,歡迎您根據需要對其進行更改。

如果您不想更改代碼,只需更改標簽的顏色即可輕松修復標簽,因此它們與邊緣不同。

我遇到了邊緣標簽重疊的相同問題。 我用來定位邊緣標簽的快速而骯臟的解決方案是在字符串值中用空格填充一定長度。

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

它將避免邊緣標簽在中心發生混濁和重疊,尤其是在構建二分圖時。 希望這有助於你們中的一些人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM