How to add custom vertex labels in JUNG graph visualization?
Asked Answered
T

2

7

How to use custom vertex labels in JUNG graph visualization?

I am following Jung 2.0 Tutorial where I found that setVertexLabelTransformer() can be used to label the vertices, but these labels cannot be customized, to my knowledge.

For example, the below code produces three vertices, having vertex-labels 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);       
    }
}

How do I add labels like "q0"?

Throughout answered 19/2, 2012 at 15:41 Comment(8)
Please cite the tutorial you are following. See also Initial Threads.Verdha
Since you have defined the generics of SparseMultigraph<V, E> as SparseMultigraph<Integer, String> where the generic V for vertex as Integer and the generic E for edge as String, hence each vertex's label value is in Integer and each edge's label in String. So, if you want each vertex by names like q1, v2, etc., use String for generic V, so you can pass a vertex name like this g.addVertex("q1");Anchoress
To change default vertex label transformer in a JUNG rendering context, search for the keyword getRenderContext().setVertexLabelTransformerAnchoress
More in SO: #3289386. Take note that it depends on your definition of generics for vertices and edges. If the sample doesn't work for you, check the generic types used in the sample and modify it according to yours.Anchoress
@eee Using String for V in SparseMultigraph<V, E> solved the problem. Thank You.Throughout
See the answer to #9353031. That also applies to vertex labels.Stableboy
@eee Could you please post your answer which is put above as a comment ,so that I can accept it?Throughout
@Dilini, check this and please answer. #70664244Benton
A
5

Since you have defined the generics of SparseMultigraph<V, E> as SparseMultigraph<Integer, String> where the generic V for vertex as Integer and the generic E for edge as String, hence each vertex's label value is in Integer and each edge's label in String. So, if you want each vertex by names like q1, v2, etc., use String for generic V, so you can pass a vertex name like this g.addVertex("q1");

Anchoress answered 4/3, 2012 at 23:9 Comment(0)
P
5

If you have a custom class for nodes, I will give an example from my project. I have a class Node which is like :

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()
{
}

}

// You just need to override transform like below:

vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller() {
                @Override
                public String transform(Object v) {

                    return ((Node)v).screenName;
                }});

// It will show the screenName property as a label for each node in the graph. // I hope this is what you are looking for.

Polyhymnia answered 16/10, 2013 at 17:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.