Min's blog

I choose to see the beauties in the world.

导航

echart力导向图

Posted on 2017-07-21 10:55  Min77  阅读(357)  评论(0编辑  收藏  举报
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="GBK">
    <title>Title</title>
    <script src="js/jquery-1.11.1.min.js"></script>
    <script src="js/echarts.min.js"></script>
    <script>
        $(document).ready(function(){
            var myChart = echarts.init(document.getElementById('piedemo'));
            option = {
                tooltip: {
                    show: true,
                },
                legend: {
                    x: "center",
                    y:'30px',
                    data: ["家人", "朋友"]
                },
                animation: false,
                series: [{
                    categories: [{
                        name: '家人',
                        itemStyle: {
                            normal: {
                                color: "#009800",
                            }
                        }
                    }, {
                        name: '朋友',
                        itemStyle: {
                            normal: {
                                color: "#4592FF",
                            }
                        }
                    }],
                    type: 'graph',
                    layout: 'force',
                    symbol: "roundRect",
                    symbolSize: 50,
                    roam: true, //禁止用鼠标滚轮缩小放大效果
                    edgeSymbol: ['circle', 'arrow'],
                    edgeSymbolSize: [0, 10],
                    // 连接线上的文字
                    focusNodeAdjacency: true, //划过只显示对应关系
                    edgeLabel: {
                        normal: {
                            show: true,
                            textStyle: {
                                fontSize: 18
                            },
                            formatter: "{c}"
                        }
                    },
                    categories: [{
                        name: '家人',
                        itemStyle: {
                            normal: {
                                color: "#009800",
                            }
                        },
                    }, {
                        name: '朋友',
                        itemStyle: {
                            normal: {
                                color: "#4592FF",
                            }
                        }
                    }],
                    lineStyle: {
                        normal: {
                            opacity: 1,
                            width: 2,
                            curveness: 0
                        }
                    },
                    force: {
                        repulsion: 5000
                    },
                    label: {
                        normal: {
                            show: true,
                            position : ['20%','38%'],//标签的位置。['50%', '50%'][x,y]
                            textStyle:{
                                color:"#fff"
                            }
                        }
                    },
                    data: [{
                        name: '中爆数字',
                        symbol: "Rect",
                        symbolSize: [250,30],
                        label: {
                            normal: {
                                show: true,
                                position : ['40%', '20%'],//标签的位置。['50%', '50%'][x,y]
                            }
                        }
                    }, {
                        name: '节点2',
                        category: 1,
                        itemStyle: {
                            normal: {
                                color: '#090',
                            },
                            emphasis: {
                                color: "#000"
                            }
                        }
                    }, {
                        name: '节点3',
                        category: 1
                    }, {
                        name: '节点4',
                        category: 0
                    }, {
                        name: '节点5',
                        category: 0
                    }, {
                        name: '节点6',
                        category: 0
                    }],
                    links: [{
                        source: '节点2',
                        target: 0,
                        value: "朋友",
                        lineStyle: {
                            normal: {
                                color: '#38f',
                                curveness: 0 // 线的弯曲度 0-1之间 越大则歪曲度更大
                            }
                        },
                        label: {
                            normal: {
                                textStyle: {
                                    color: '#07ac72'
                                }
                            }
                        }
                    }, {
                        source: '节点3',
                        target: 0,
                        value: "朋友"
                    }, {
                        source:  '节点4',
                        target: 0,
                        value: "家人"
                    }, {
                        source:  '节点5',
                        target: 0,
                        value: "家人"
                    }, {
                        source:  '节点6',
                        target: 0,
                        value: "家人"
                    } ]
                }]
            };

            myChart.setOption(option);
            myChart.on('dblclick', openOrFold);

            function appendPath(params){    //拼接节点关系并显示在左下角,
                var option = myChart.getOption();
                var series = option.series[params.seriesIndex]; //获取图表
                var links= series.links;//获取所有连线
                if(params.dataType=="node"){ //dataType可以是edge(线条)或node(数据)
                    var str = params.data.name;
                    for( i = 0 ; i < links.length; i++){
                        if(links[i].source==str){
                            str =links[i].source+"->" +series.data[links[i].target].name ;
                        }
                    }
                    return str;
                }else if(params.dataType=="edge"){ //当鼠标停留在连线上时,暂不处理
                    return "";
                }
            }

            function openOrFold(params) {  //该事件会提示节点间关系
                var str = appendPath(params);
                document.getElementById("main_1").innerHTML = str;
                var oW = $('#main_1').width()/2;
                $('#main_l').css({marginLeft:-oW});
                return str;
            }
        });
    </script>
    <style>
        .box{position: relative;width: 800px;
            height: 600px;
        margin: 40px auto;}
        #piedemo{width:800px;height:600px;margin: 40px auto;}
        #main_1{
            height: 20px;
            width: 80%;
            text-align: center;
            background: rgba(243,112,0,.2);
            z-index: 10000;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="box">
        <div id="main_1"></div>
        <div id="piedemo"></div>
    </div>
</body>
</html>