JUNG(Java Graph):如何防止顶点和边缘标签重叠?

the*_*ega 6 java label graph

我目前正在使用Jung绘制图形(我的意思是图形而不是图表!).问题是顶点和边缘标签与顶点和边缘重叠.这会导致奇怪的图形.问题不受特定布局算法的约束(尽管我一直在使用FRLayout).

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

Ema*_*oor 7

您只需要设置标签偏移量:

vv.getRenderContext().setLabelOffset(20);
Run Code Online (Sandbox Code Playgroud)

其中vv是您的VisualizationViewer对象.


小智 6

顺便说一句,如果你想改变颜色,起初它似乎是一个主要的痛苦.但我最近发现了这个小技巧:

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);
Run Code Online (Sandbox Code Playgroud)

  • 你知道在JUNG中记录HTML的这种用法吗?换句话说,在JUNG中使用HTML的可能性和限制是什么? (3认同)

Jim*_*imN 5

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

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

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

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

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