繁体   English   中英

色标中的边缘

[英]Colour Code an edge in JUNG

我正在尝试根据收到的数据使用JUNG生成动态图。 我希望边缘自动进行颜色编码,而不是基于任何条件。 我正在尝试使用此代码,但这也失败了:

Transformer<String, Paint> edgePaint = new Transformer<String, Paint>() 
    {
        private final Color[] palette = {Color.GREEN, Color.YELLOW, Color.RED, Color.GRAY, Color.BLUE, Color.CYAN, Color.WHITE, Color.orange};
        int i=0;
        @Override
        public Paint transform(String graphEdge) 
        {
            if(i == 7)
            {
                i = 0;
            }
            else
            {
                i = i + 1;
            }
            return palette[i];

        }
    };
    viewer.getRenderContext().setEdgeDrawPaintTransformer(edgePaint);

我的边缘是字符串,并且无法预料要设置条件。 每个边缘都需要一种颜色,并且当我放大和缩小时,它不应改变。 这可能吗 ?

(1)如果您确实只想按顺序分配颜色,然后将其环绕在列表中(例如RGBRGBRG ...),则可以定义一个Map,然后随意填充它(例如,遍历边缘并分配每个颜色)。 然后让变形金刚刚回来

edgeColor.get(graphEdge)

(2)如果您不太在乎颜色的使用顺序,或者偶尔出现重复,则可以获取边缘的hashCode,将其修改为颜色列表的长度,然后返回:

palette[graphEdge.hashCode() % palette.length];

这是对边数进行近似估计时的示例答案:

同样,这避免了将相同的颜色分配给多个边缘。

  Transformer<String, Paint> edgePaint = new Transformer<String, Paint>() 
    {
        private final Color[] palette = {Color.GREEN, Color.YELLOW, Color.RED, Color.GRAY, Color.BLUE, Color.CYAN, Color.WHITE, Color.ORANGE};
        int[] boolFlag = new int[palette.length];

        @Override
        public Paint transform(String graphEdge) 
        {
            int colorNumber = Math.abs(graphEdge.hashCode() % palette.length);
            if(boolFlag[colorNumber] != 1)
            {
                boolFlag[colorNumber] = 1;
                return palette[colorNumber];
            }

            else
            {
                int i=0;
                for(i=0; i < palette.length; i++)
                    if(boolFlag[i] != 1)
                    {
                        colorNumber = i;
                        break;
                    }
                if( i == palette.length)
                {
                    for(i=0; i< palette.length; i++)
                        boolFlag[i] =0;
                }
                boolFlag[colorNumber] = 1;
                return palette[colorNumber];
            }
        }
    };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM