如何在 JUNG 图形可视化中添加自定义顶点标签?
Posted
技术标签:
【中文标题】如何在 JUNG 图形可视化中添加自定义顶点标签?【英文标题】:How to add custom vertex labels in JUNG graph visualization? 【发布时间】: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<V, E>
的泛型定义为SparseMultigraph<Integer, String>
,其中顶点的泛型V 为整数,边缘的泛型E 为字符串,因此每个顶点的标签值都是整数,每个边的字符串中的标签。因此,如果您希望每个顶点的名称为 q1、v2 等,请使用 String 作为通用 V,这样您就可以传递一个像 g.addVertex("q1");
这样的顶点名称
要更改 JUNG 渲染上下文中的默认顶点标签转换器,请搜索关键字 getRenderContext().setVertexLabelTransformer
更多内容:***.com/questions/3288886/…。请注意,这取决于您对顶点和边的泛型定义。如果示例不适合您,请检查示例中使用的泛型类型并根据您的进行修改。
@eee 在SparseMultigraph<V, E>
中将String
用于V
解决了这个问题。谢谢。
【参考方案1】:
由于您将SparseMultigraph<V, E>
的泛型定义为SparseMultigraph<Integer, String>
,其中顶点的泛型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>
【讨论】:
以上是关于如何在 JUNG 图形可视化中添加自定义顶点标签?的主要内容,如果未能解决你的问题,请参考以下文章