我目前正在使用 Jung 绘制图表(我的意思是图表而不是图表!)。问题是顶点和边缘标签与顶点和边缘重叠。这会导致奇怪的图形。问题没有绑定到特定的布局算法(虽然我一直在使用FRLayout)。

有没有可能告诉JUNG防止这些重叠?我希望这已经实施,唯一的问题是找到合适的选择!

有帮助吗?

解决方案

(以下答案假设Jung2;我对Jung2不熟悉。)

Jung的优势之一是它非常易于扩展,并且易于扩展。 Jung允许您插入各种变换器(简单渲染属性),渲染器(更复杂的渲染)等等,以在默认设置不正确时自定义行为。这些通常安装在RenderContext上(您可以从VisualizationViewer获取)。

另一方面,它的缺点是它的复杂性和缺乏体面的文档。如果您要进行任何中等到重度的定制,您需要深入了解Jung来源。

例如,可以通过插入新的顶点标签渲染器(Renderer.VertexLabel接口)来自定义顶点标签渲染。例如,您可以实例化BasicVertexLabelRenderer并指定其他位置(北,西,中等)。如果您愿意将形状更改为大于该圆形的东西(为此,请安装您自己的顶点形状变换器 - 变换器的一个实例),您可以将标签放在中心。或者,您可以创建自己的此接口自定义实现,在标签文本下呈现背景。

您还可以安装自己的Renderer.EdgeLabel调整版(参见Jung的BasicEdgeLabelRenderer)来自定义边缘标签的位置。

其他提示

您只需设置标签偏移量:

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

我认为这只是它的实现方式,代码的作者可能不认为它是一个问题。 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归因
不隶属于 StackOverflow
scroll top