echart 关系图 ---- 配置 可自定义图片

代码如下:

var myChart = echarts.init(document.getElementById("relation-chart"));
var echartJson ={
    "series":[
        {
            "edgeLabel":{
                "normal":{
                    "formatter":"{c}",
                }
            },
            "force":{
                "repulsion":200,//枝干线的长短 
                'edgeLength':[80,130]
            },
            "layout":"force",
            "roam":true,
            "itemStyle":{
                "normal":{
                    "color":"#f1f9f7"//文字颜色
                }
            },
            "label":{
                "normal":{
                    "show":true,//是否显示文字
                    "position": "bottom",
                }
            },
            "symbol":"circle",
            "symbolSize":1,
            "type":"graph",
            'lineStyle': {//线的样式
                'normal': {
                    opacity: .6,
                    curveness: 0,
                    color: '#4fffd4',
                    type: 'solid'
                }
            },
        }
    ],
    "tooltip":{
        "show":false//鼠标经过提示文字
    }
};
loadEcharts(echartJson);

// 关系链数据
var links=[
    {
        "source":"prente1",
        "target":"c1"
    },
    {
        "source":"prente1",
        "target":"c2"
    },
    {
        "source":"prente1",
        "target":"c3"
    },
    {
        "source":"prente1",
        "target":"c4"
    },
    {
        "source":"prente1",
        "target":"c7"
    },
    {
        "source":"c6",
        "target":"s1"
    },
    {
        "source":"prente1",
        "target":"c6"
    }
];

// 数据
var map =[
    {
        "name":"",
        "symbolSize":100,
        "symbol":"../assets/img/relation_self.png",
        "id":"prente1",
        "itemStyle":{
            "normal":{
                "color":"red"
            }
        }
    },
    {
        "name":"母亲:夏雪",
        "symbol":"../assets/img/relation_mom.png",
        "symbolSize":50,
        "id":"c1",
    },
    {
        "name":"父亲:梅长苏",
        "symbol":"../assets/img/relation_father.png",
        "symbolSize":50,
        "id":"c2",
    },
    {
        "name":"女儿:梅芳芳",
        "symbol":"../assets/img/relation_child.png",
        "symbolSize":40,
        "id":"c3",
    },
    {
        "name":"妻子:游泳",
        "symbol":"../assets/img/relation_love.png",
        "symbolSize":50,
        "id":"c4",
    },
    {
        "name":"朋友:姜文",
        "symbol":"../assets/img/relation_friend.png",
        "symbolSize":50,
        "id":"c6",
    },
    {
        "name":"朋友:唐宛如",
        "symbolSize":50,
        "symbol":"../assets/img/relation_friend.png",
        "id":"c7",
    }
];
pubdata(map);

function loadEcharts(echartJson) {
    var option = echartJson;
    if (option && typeof option === "object") {
        myChart.setOption(option, true);
    }
}

function getImgData(imgSrc) {
    var fun = function (resolve) {
        const canvas = document.createElement('canvas');
        const contex = canvas.getContext('2d');
        const img = new Image();
        img.crossOrigin = '';
        img.onload = function () {
            //设置图形宽高比例
            center = {
                x: img.width / 2,
                y: img.height / 2
            };
            var diameter = img.width;//半径
            canvas.width = diameter;
            canvas.height = diameter;
            contex.clearRect(0, 0, diameter, diameter);
            contex.save();
            contex.beginPath();
            radius = img.width / 2;
            contex.arc(radius, radius, radius, 0, 2 * Math.PI); //画出圆
            contex.clip(); //裁剪上面的圆形
            contex.drawImage(img, center.x - radius, center.y - radius, diameter, diameter, 0, 0,
                diameter, diameter); // 在刚刚裁剪的园上画图
            contex.restore(); // 还原状态
            resolve(canvas.toDataURL('image/png', 1))
        };
        img.src = imgSrc;
    };
    var promise = new Promise(fun);
    return promise
}

function pubdata(json) {
    var androidMap = json;
    var picList = [];//获取出全部图片
    for (var i = 0; i < androidMap.length; i++) {
        //把图片路径转成canvas 
        let p = getImgData(androidMap[i].symbol);
        console.log(p)
        picList.push(p);
    }
    Promise.all(picList).then(function (images) {
        //取出base64 图片 然后赋值到jsondata中
        for (var i = 0; i < images.length; i++) {
            var img = "image://" + images[i];
            console.log(img);
            androidMap[i].symbol = img;
        }
        // 把数据设置到Echart中data
        myChart.setOption({
            series: [{
                data: androidMap,
                links:links
            }]
        })
    })
}

效果图:
在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值