Echarts 实现自定义图片关系图

百度echart 实现带图片头像的关系图

<!DOCTYPE html>
<html style="height: 100%">
 
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta charset="utf-8">
    <style type="text/css">
       
    </style>
</head>
 
<body style="height: 100%; margin: 0">
    <div id="container" style="width:600px; height:500px; overflow:hidden;border: 1px solid red;"></div>


    <script type="text/javascript" src="echarts.min.js"></script>
    <script type="text/javascript">
 
        var myChart = echarts.init(document.getElementById("container")); 
        var echartJson ={
            "series":[
                {
                    "edgeLabel":{
                        "normal":{
                            "formatter":"{c}",
                            //"show":true,//是否显示枝干上的关系文字
                        }
                    },
                    //"edgeSymbol":"arrow",//circle,arrow//线两边显示箭头或圆
                    "force":{
                        "repulsion":200,//枝干线的长短 
                        'edgeLength':40
                    },
                    "layout":"force",
                    
                    "roam":true,
                    "itemStyle":{
                        "normal":{
                            "color":"#00ff00"//文字颜色
                        }
                    },
                    "label":{
                        "normal":{
                            //"show":true,//是否显示文字
                        }
                    },
                    "symbol":"circle",
                    "symbolSize":1,
                    "type":"graph",
                    'lineStyle': {//线的样式
                        'normal': {
                            'opacity': 1,
                            // width: 5,
                            curveness: 0,
                            'color': '#dcdcdc',
                            'type': 'solid'
                        }
                    },
                }
            ],
            "tooltip":{
                "show":false//鼠标经过提示文字
            }
        };
        loadEcharts(echartJson);
 
        function loadEcharts(echartJson) {
            var option = echartJson;
            if (option && typeof option === "object") {
                myChart.setOption(option, true);
            }
        }
        //echarts图表点击跳转
        myChart.on('click', function (params) {
 
            if (params.data.id) {
                var idCard = params.data.link; // 获取被点击节点的身份证号
                alert(idCard);

            } else {
                alert('您点击节点信息!');
            }
        });


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

        // 博主数据
        var map =[
                    {
                        "name":"张1",
                        "symbolSize":50,
                        "symbol":"https://p1-dy.bytecdn.cn/aweme/720x720/1731400038dc6ee6dc1a8.jpeg",
                        "id":"prente1",
                        "itemStyle":{
                            "normal":{
                                "color":"red"
                            }
                        }
                    },  
                    {
                        "name":"张4",
                        "symbol":"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1283473720,778141451&fm=11&gp=0.jpg",
                        "symbolSize":20,
                        "id":"c1",
                        "link":'https://echarts.baidu.com/examples/#chart-type-bar'
                    },
                    {
                        "name":"",
                        "symbol":"https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2495925920,1765913267&fm=26&gp=0.jpg",
                        "symbolSize":30,
                        "id":"c2",
                        "link":'https://echarts.baidu.com/examples/#chart-type-bar'
                    },
                    {
                        "name":"",
                        "symbol":"https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1358434829,490132153&fm=26&gp=0.jpg",
                        "symbolSize":30,
                        "id":"c3",
                        "link":'https://echarts.baidu.com/examples/#chart-type-bar'
                    },
                    {
                        "name":"张7",
                        "symbol":"https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1515174754,211221812&fm=26&gp=0.jpg",
                        "symbolSize":20,
                        "id":"c4",
                        "link":'https://echarts.baidu.com/examples/#chart-type-bar'
                    },
                    {
                        "name":"张3",
                        "symbol":"https://p9-dy.bytecdn.cn/aweme/720x720/67270022b4d9a3bb5d63.jpeg",
                        "symbolSize":20,
                        "id":"c6",
                        "link":'https://echarts.baidu.com/examples/#chart-type-bar'
                    },
                    {
                        "name":"张212",
                        "symbolSize":20,
                        "symbol":"https://p9-dy.bytecdn.cn/aweme/720x720/1b58b0005be232ddb44cb.jpeg",
                        "id":"c7",
                        "link":'https://echarts.baidu.com/examples/#chart-type-bar'
                    },
                    {
                        "name":"张8",
                        "symbol":"https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=4204462924,532086456&fm=11&gp=0.jpg",
                        "symbolSize":20,
                        "id":"s1"
                    }
                ];
        pubdata(map);
 
        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
                    }]
                })
            })
 
        }
    </script>
</body>
 
</html>
  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Echarts 是一个非常强大的可视化库,它提供了丰富的表类型和配置项,可以满足各种数据可视化需求。其中,itemStyle 是 Echarts 中用来设置表元素样式的属性之一。通过自定义 itemStyle,我们可以实现更加个性化的数据可视化效果。 下面是一个简单的示例,展示如何使用 Echarts 实现定义 itemStyle: ```javascript // 初始化 Echarts 实例 var myChart = echarts.init(document.getElementById('myChart')); // 定义数据 var data = [ {value: 335, name: '直接访问'}, {value: 310, name: '邮件营销'}, {value: 234, name: '联盟广告'}, {value: 135, name: '视频广告'}, {value: 1548, name: '搜索引擎'} ]; // 定义定义 itemStyle var itemStyle = { normal: { borderWidth: 2, borderColor: '#fff' }, emphasis: { borderWidth: 0, shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } }; // 配置选项 var option = { series: [ { name: '访问来源', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center' }, emphasis: { label: { show: true, fontSize: '30', fontWeight: 'bold' } }, labelLine: { show: false }, data: data.map(function (item) { return { value: item.value, name: item.name, itemStyle: itemStyle // 将自定义 itemStyle 应用到每个数据项 }; }) } ] }; // 使用配置项显示表 myChart.setOption(option); ``` 在上面的代码中,我们首先定义了一个自定义的 itemStyle 对象,其中 normal 表示普通状态下的样式,emphasis 表示高亮状态下的样式。然后在配置选项中,通过将 itemStyle 应用到每个数据项,实现了自定义的样式效果。 需要注意的是,Echarts 中的 itemStyle 属性可以在不同的表类型中有不同的含义,具体可以查看官方文档。同时,在实际使用中,我们还可以根据需要进一步扩展自定义的 itemStyle,实现更加复杂的可视化效果。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值