关系图谱

描述:当前是关于Echarts图表中的 关系图 示例。
 
            var current = ['张子山'];

var getname = ['张大海','李梅'];

var getrelation = ['父亲','母亲'];

var getname2 = ['张三','李四','王五'];

var getrelation2 = ['舍友','舍友','舍友'];

var getmajor2 = ['19级化学类','19级化学类','19级化学类'];

var getname3 = ['李慧珍','王沥川','李晨曦','赵雪琴','张铭轩'];

var getmajor3 = ['授课教师','授课教师','授课教师','授课教师','授课教师'];

var getlesson3 = ['工业生产应用有机化学','工业生产应用有机化学','工业生产应用有机化学','工业生产应用有机化学','工业生产应用有机化学'];

var getpost3 = ['研究员','研究员','研究员','研究员','研究员'];



current=current[0]
var family = getname.map((item,index)=>{
    return{
        name:getname[index],
        relation:getrelation[index]
    }
})
var roommate = getname2.map((item,index)=>{
    return {
        name:getname2[index],
        relation:getrelation2[index],
        major:getmajor2[index]
    }
})
var teacher = getname3.map((item,index)=>{
    return {
        name:getname3[index],
        relation:getmajor3[index],
        lesson:getlesson3[index],
        post:getpost3[index]
    }
})
var data = [{
    type:'家庭关系',
    value:family
},{
    type:'舍友关系',
    value:roommate
},{
    type:'师生关系',
    value:teacher
}]




// 请勿随意修改
// var current = '张子山'
// var data = [{
//     type:'家庭关系',
//     value:[{
//         name:'李梅',
//         relation:'姐'
//     },{
//         name:'张大海',
//         relation:'父亲'
//     }]
// },{
//     type:'舍友关系',
//     value:[{
//         name:'张三',
//         relation:'舍友',
//         major:'19级化学类'
//     },{
//         name:'李四',
//         relation:'舍友',
//         major:'19级化学类'
//     },{
//         name:'王五',
//         relation:'舍友',
//         major:'19级化学类'
//     }]
// },{
//     type:'师生关系',
//     value:[{
//         name:'李慧珍',
//         relation:'授课教师',
//         lesson:'工业生产应用有机化学',
//         post:'研究员'
//     },{
//         name:'王沥川',
//         relation:'授课教师',
//         lesson:'工业生产应用有机化学',
//         post:'研究员'
//     },{
//         name:'李晨曦',
//         relation:'授课教师',
//         lesson:'工业生产应用有机化学',
//         post:'研究员'
//     },{
//         name:'赵雪琴',
//         relation:'授课教师',
//         lesson:'工业生产应用有机化学',
//         post:'研究员'
//     },{
//         name:'张铭轩',
//         relation:'授课教师',
//         lesson:'工业生产应用有机化学',
//         post:'研究员'
//     }]
// }]

// console.log(data)

// 圆形颜色
var colorList = {
    '家庭关系':new echarts.graphic.LinearGradient(0,0,0,1,[{
        offset:0,
        color:'#5998FF'
    },{
        offset:1,
        color:'#5CC0FF'
    }]),
    '舍友关系':new echarts.graphic.LinearGradient(0,0,0,1,[{
        offset:0,
        color:'#0FB27C'
    },{
        offset:1,
        color:'#4BCDA1'
    }]),
    '师生关系':new echarts.graphic.LinearGradient(0,0,0,1,[{
        offset:0,
        color:'#7A7AE9'
    },{
        offset:1,
        color:'#899BF9'
    }]),
    '中心':new echarts.graphic.LinearGradient(0,0,0,1,[{
        offset:0,
        color:'#FF6061'
    },{
        offset:1,
        color:'#FF7E7C'
    }])
}
// 背景颜色
var shadowList = {
    '家庭关系':'rgba(42, 154, 241, 0.5)',
    '舍友关系':'rgba(33, 186, 135, 0.5)',
    '师生关系':'rgba(129, 138, 241, 0.5)'
}
// 线条颜色
var lineList = {
    '家庭关系':'#DCEAF2',
    '舍友关系':'#DCF2ED',
    '师生关系':'#F1ECF4'
}
var links = []
var linkNum = 1;
var seriesData = data.map((item,index)=>{
    return item.value.map((it,id)=>{
        links.push({
            source:0,
            target:linkNum++,
            lineStyle:{
                color:lineList[item.type]
            }
        })
        return {
            ...it,
            itemStyle:{
                normal:{
                    color:colorList[item.type],
                    shadowColor:shadowList[item.type],
                    shadowBlur:10
                }
            },
            category:item.type
        }
    })
})

option = {
        title: {
            text: ''
        },
        tooltip: {
            trigger: 'item',
            align: 'left',
            backgroundColor:'#fff',
            formatter: function (params) {
                let html = ''
                if(params.data.category === '家庭关系'){
                    html = `<span style="font-size:16px;line-height:32px;color:#4e4e4e;font-weight:bold">${params.data.name}</span>
                            <br/>
                            <span style="font-size:14px;line-height:32px;color:#4e4e4e">关系:${params.data.relation}</span>
                    `
                }else if(params.data.category === '舍友关系'){
                    html = `<span style="font-size:16px;line-height:32px;color:#4e4e4e;font-weight:bold">${params.data.name}</span>
                            <br/>
                            <span style="font-size:14px;line-height:32px;color:#4e4e4e">关系:${params.data.relation}</span>
                            <br/>
                            <span style="font-size:14px;line-height:32px;color:#4e4e4e">年级专业:${params.data.major}</span>
                    `
                }else if(params.data.category === '师生关系'){
                    html = `
                            <span style="font-size:16px;line-height:32px;color:#4e4e4e;font-weight:bold">${params.data.name}</span>
                            <br/>
                            <span style="font-size:14px;line-height:32px;color:#4e4e4e">关系:${params.data.relation}</span>
                            <br/>
                            <span style="font-size:14px;line-height:32px;color:#4e4e4e">专业技术职务:${params.data.post}</span>
                            <br/>
                            <span style="font-size:14px;line-height:20px;color:#4e4e4e;">授课课程:${params.data.lesson}</span>
                    `
                }
                return html
            },
            extraCssText:'white-space:normal;padding:5px 15px;width:200px;word-break:break-all;box-shadow: 1px 6px 15px 0px rgba(0, 0, 0, 0.13)'
        },

        label: {
            normal: {
                show: true,
                textStyle: {
                    fontSize: 12
                }
            }
        },
        legend: {
            x: 'center',
            show: true,
            data: ['家庭关系', '舍友关系','师生关系']
        },
        series: [
            {
                type: 'graph',
                layout: 'force',
                symbolSize: 80,
                center: ['50%', '50%'],
                draggable:true,
                focusNodeAdjacency: true,
                roam: false,
                itemStyle: {
                    normal: {
                        color: colorList['中心'],
                        shadowColor:'rgba(255, 100, 100, 0.5)',
                        shadowBlur:10
                    },
                    emphasis: {
                        // 高亮状态
                    }
                },
                categories: [
                    {
                        name: '家庭关系',
                        itemStyle: {
                            normal: {
                                color: colorList['家庭关系']
                            }
                        }
                    },
                    {
                        name: '舍友关系',
                        itemStyle: {
                            normal: {
                                color: colorList['舍友关系']
                            }
                        }
                    },
                    {
                        name:'师生关系',
                        itemStyle:{
                            
                            normal:{
                                color:colorList['师生关系']
                            }
                        }
                    }
                ],
                label: {
                    normal: {
                        color:'#ffffff',
                        show: true,
                        textStyle: {
                            fontSize: 12
                        }
                    }
                },
                force: {
                    repulsion: 1000,
                    gravity: 0.1,
                    edgeLength: [100, 200]
                },
                edgeSymbolSize: [4, 50],

                lineStyle: {
                    normal: {
                        width: 5,
                        curveness: 0.1, // 线的弯曲度 0-1之间 越大则歪曲度更大
                        color: '#B5D7C9'
                    }
                },
                data:[{name:current},...seriesData.flat(2)],
                links:links
            }
        ]
    };