【问题标题】:How to add custom vertex labels in JUNG graph visualization?如何在 JUNG 图形可视化中添加自定义顶点标签?
【发布时间】:2012-03-10 04:06:21
【问题描述】:

JUNG图形可视化中如何使用自定义顶点标签?

我在关注Jung 2.0 Tutorial,发现setVertexLabelTransformer() 可用于标记顶点,但据我所知,这些标签无法自定义。

例如,以下代码生成三个顶点,顶点标签为 1,2,4:

import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.SparseMultigraph;
import edu.uci.ics.jung.visualization.BasicVisualizationServer;
import java.awt.Dimension;
import javax.swing.JFrame;

public class SimpleGraphView {
    Graph<Integer, String> g;

    public SimpleGraphView() {       
        g = new SparseMultigraph<Integer, String>();
        g.addVertex((Integer)1);
        g.addVertex((Integer)2);
        g.addVertex((Integer)4); 
    }

    public static void main(String[] args) {
        SimpleGraphView sgv = new SimpleGraphView(); 
        Layout<Integer, String> layout = new CircleLayout(sgv.g);
        layout.setSize(new Dimension(800,800));  
        BasicVisualizationServer<Integer,String> vv =
            new BasicVisualizationServer<Integer,String>(layout);
        vv.setPreferredSize(new Dimension(850,850)); 

        JFrame frame = new JFrame("Simple Graph View");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(vv); 
        frame.pack();
        frame.setVisible(true);       
    }
}

如何添加“q0”之类的标签?

【问题讨论】:

  • 请引用您正在学习的教程。另见Initial Threads
  • 由于您已将SparseMultigraph&lt;V, E&gt; 的泛型定义为SparseMultigraph&lt;Integer, String&gt;,其中顶点的泛型V 为整数,边缘的泛型E 为字符串,因此每个顶点的标签值都是整数,每个边的字符串中的标签。因此,如果您希望每个顶点的名称为 q1、v2 等,请使用 String 作为通用 V,这样您就可以传递一个像 g.addVertex("q1"); 这样的顶点名称
  • 要更改 JUNG 渲染上下文中的默认顶点标签转换器,请搜索关键字 getRenderContext().setVertexLabelTransformer
  • 更多内容:stackoverflow.com/questions/3288886/…。请注意,这取决于您对顶点和边的泛型定义。如果示例不适合您,请检查示例中使用的泛型类型并根据您的进行修改。
  • @eee 在SparseMultigraph&lt;V, E&gt; 中将String 用于V 解决了这个问题。谢谢。

标签: java swing jung visualizer


【解决方案1】:

由于您将SparseMultigraph&lt;V, E&gt; 的泛型定义为SparseMultigraph&lt;Integer, String&gt;,其中顶点的泛型V 为整数,边缘的泛型E 为String,因此每个顶点的标签值都在Integer 中,并且每个String 中的边缘标签。因此,如果您希望每个顶点的名称为 q1、v2 等,请使用 String 来表示通用 V,这样您就可以传递一个像 g.addVertex("q1"); 这样的顶点名称

【讨论】:

    【解决方案2】:

    如果你有一个自定义的节点类,我会举一个我项目中的例子。我有一个类节点,就像:

    public class Node 
    {
    
    public long tweetId = 0L;
    public long nodeId = 0L;
    public String screenName = "";
    public Date reTweetDate = new Date();
    public boolean isMainNode = false;
    public int size = 0;
    
    public Node()
    {
    }
    
    }
    

    // 你只需要像下面这样覆盖转换:

    vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller() {
                    @Override
                    public String transform(Object v) {
    
                        return ((Node)v).screenName;
                    }});
    

    // 它将 screenName 属性显示为图中每个节点的标签。 // 我希望这就是你要找的。​​p>

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      相关资源
      最近更新 更多