使用echarts实现简单的关系图谱

使用echarts实现简单的关系图谱

如图:

在这里插入图片描述

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript" src="./js/lib/jquery/jquery.min.js"></script>
    <script type="text/javascript" src="./js/echarts.min.js"></script>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
    </style>
</head>
<body>
    <!-- 为 ECharts 准备一个 Dom 盒子 -->
    <div class="tree-container">
        <div id="main" style="width: 100%;height:900px;border:1px solid #ccc;"></div>
    </div>
    <script>
        var myChart = echarts.init(document.getElementById('main'));

        // 节点
        var data = [
            {
                id: 0,
                category: 0,
                name: "张三",
                sex: 0,
                openChild: 0,
                main: 1,
                draggable: false
            }, {
                id: 1,
                category: 0,
                name: "李四",
                sex: 1,
                openChild: 0
            }, {
                id: 2,
                category: 0,
                name: "赵二",
                sex: 1,
                openChild: 0
            }, {
                id: 3,
                category: 0,
                name: "李六",
                sex: 1,
                openChild: 0
            }, {
                id: 4,
                category: 0,
                name: "吴七",
                sex: 0,
                openChild: 0
            }, {
                id: 5,
                category: 0,
                name: "孙一",
                sex: 0,
                openChild: 0
            }, {
                id: 6,
                category: 0,
                name: "江五",
                sex: 1,
                openChild: 0
            }, {
                id: 7,
                category: 0,
                name: "陈八",
                sex: 0,
                openChild: 1
            }
        ];
        // 关系
        var links = [{
            source: 0,
            target: 1,
            relation: {
                name: "朋友", //关系名称
                id: 1,
            },
        }, {
            source: 0,
            target: 2,
            relation: {
                name: "朋友",
                id: 2,
            },
        }, {
            source: 0,
            target: 3,
            relation: {
                name: "朋友",
                id: 3,
            },
        }, {
            source: 0,
            target: 4,
            relation: {
                name: "朋友", 
                id: 4,
            },
        }, {
            source: 0,
            target: 5,
            relation: {
                name: "朋友",
                id: 5,
            },
        }, {
            source: 0,
            target: 6,
            relation: {
                name: "朋友",
                id: 6,
            },
        }, {
            source: 0,
            target: 7,
            relation: {
                name: "朋友",
                id: 7,
            },
        }, {
            source: 4,
            target: 5,
            relation: {
                name: "朋友",
                id: 8,
            },
        }];

        // 给节点替换图片  image:// 打头
        for (var i = 0; i < data.length; i++) {
            if (data[i].sex == 0) {
                data[i].symbol = 'image://images/women.webp';
            } else if (data[i].sex == 1) {
                data[i].symbol = 'image://images/man.webp';
            }
        }

        var option = {
            tooltip: {//弹窗
                formatter: formatterHover,//修改鼠标悬停显示的内容
            },
            toolbox: {
                show: true,
                top: 20,
                left: 20,
                feature: {
                    restore: {
                        title: '刷新'//刷新echarts图标
                    },
                    saveAsImage: {
                        title: '下载图片',//鼠标悬停在下载图标上时,显示的文字
                        name: 'network-topology'//下载图片的文件名为network-topology.png
                    }
                }
            },
            color: ['#09022C',
                '#040193',
                '#073CFE',
                '#0065C2'],
            animationDurationUpdate: 1500,
            animationEasingUpdate: 'quinticInOut',
            series: [{//图片配置
                roam: true,//是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 'scale' 或者 'move'。设置成 true 为都开启
                draggable: true,//节点是否可拖拽,只在使用力引导布局的时候有用。
                type: 'graph', //关系图
                layout: 'force', //图的布局,类型为力导图,'circular' 采用环形布局,见示例 Les Miserables
                hoverAnimation: true,//是否开启鼠标悬停节点的显示动画
                symbolSize: [40, 40],//图形大小
                label: { //图形上的文本标签(图片名称)
                    normal: {
                        show: true,//是否显示标签。
                        position: 'bottom',//标签的位置。['50%', '50%'] [x,y]   'inside'
                        textStyle: { //标签的字体样式
                            color: '#2D2F3B', //字体颜色
                            fontStyle: 'normal',//文字字体的风格 'normal'标准 'italic'斜体 'oblique' 倾斜
                            fontWeight: 'normal',//'normal'标准'bold'粗的'bolder'更粗的'lighter'更细的或100 | 200 | 300 | 400...
                            fontFamily: 'sans-serif', //文字的字体系列
                            fontSize: 12, //字体大小
                        }
                    },
                    emphasis: {//高亮状态
                    }
                },
                edgeLabel: { //边的设置
                    show: true,
                    position: "middle",
                    fontSize: 12,
                    // color: '#a4e0df',//线上的字体颜色
                    formatter: (params) => {
                        return params.data.relation.name;
                    },
                },
                edgeSymbol: ['none', 'none'],//边两端的标记类型,可以是一个数组分别指定两端,也可以是单个统一指定。默认不显示标记,常见的可以设置为箭头,如下:edgeSymbol: ['circle', 'arrow']
                force: {
                    repulsion: 450,//相距距离
                    edgeLength: [150, 200],
                    layoutAnimation: true
                },
                edgeSymbolSize: 10,//边两端的标记大小,可以是一个数组分别指定两端,也可以是单个统一指定。
                lineStyle: { //节点连线样式。
                    normal: {
                        color: '#31354B',
                        width: '1',
                        type: 'solid', //线的类型 'solid'(实线)'dashed'(虚线)'dotted'(点线)
                        curveness: 0, //线条的曲线程度,从0到1
                        opacity: 1
                        // 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。默认0.5
                    },
                    emphasis: {//高亮状态

                    }
                },
                data: data,
                links: links //edges是其别名代表节点间的关系数据。
            }]
        };

        function formatterHover(params) {
            if (params.dataType === "node") {
                if (params.data.main == 1) {
                    return `主要人物:${params.data.name}`
                } else {
                    return `${params.data.name}`

                }
            } else {
                return `${params.data.relation.name}`
            }
        }

        myChart.setOption(option);

		// 添加点击事件
		// myChart.on('click', function(params) {
            // 如果点击的是节点
            // if (params.dataType === "node") {
            	// todo...
            // }
        // });

    </script>
</body>
</html>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 大屏数据可视化 ## 重要声明 本项目所有案例采用的数据均属虚构,切勿当真! ## 项目案例 - 上市公司全景概览 综合使用条形、柱状、折线、饼、地、数字翻牌器来实现一个常规的大屏数据可视化项目。 ## 项目案例 - 上市公司地域分布 以百度地为底,结合ECharts绘制地理信息数据 ## 旭日 - 基于ECharts V4.2 旭日(Sunburst)是ECharts 4.0新增的表类型,由多层的环形组成,在数据结构上,内圈是外圈的父节点。 因此,它既能像饼一样表现局部和整体的占比,又能像矩形树一样表现层级关系。 ## 树 - 基于ECharts V4.2 树是一种流行的利用包含关系表达层次化数据的可视化方法。 ## 地数据可视化 - 基于ECharts Geo 地热点、飞线动效,世界地、中国地、省份地、城市地、区县地 ## 3D表展示 - 基于ECharts GL 3D柱形,3D地球,二维数据的3D化展示 ## 热力展示 - 基于ECharts & 百度地 基于百度地的热力,基于笛卡尔坐标系的热力 ## ECharts扩展示例 词云,水球,烟花秀,关系图谱,中国地 ## 阿里云DataV案例 - 智慧文旅驾驶舱 基于阿里云DataV大屏制作工具,演示表组件基本用法 ## 阿里云DataV案例 - 企业实时销售大盘 基于DataV行业模板快速生成,采用静态JSON数据 ## 百度Sugar案例 - 上交所上市公司全景概览 基于百度Sugar行业模板快速生成,采用远程数据源 ## 百度Sugar案例 - 深交所上市公司全景概览 以已有的大屏为模板快速创建,切换风格,更改数据源 ## 腾讯云案例 - 云计算服务监控 基于腾讯云平台提供的模板制作,采用静态JSON数据 ## 腾讯云案例 - 智慧零售门店数据(竖屏版) 基于腾讯云平台提供的模板制作,采用静态JSON数据,适用于竖屏展示 ## 大屏模板 可在这些不同风格的模板基础上快速开始一个可视化大屏项目
ECharts 是百度开源的一款数据可视化库,可以用来创建各种交互式的表。ECharts 中也包含了人员关系(graph)的功能,可以用来展示人员之间的关系网络。 要创建一个人员关系,首先需要引入 ECharts 的库文件,并创建一个容器元素来放置表。然后通过配置项来定义表的样式和数据。以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>人员关系</title> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> </head> <body> <div id="chart" style="width: 800px; height: 600px;"></div> <script> var chart = echarts.init(document.getElementById('chart')); var option = { title: { text: '人员关系' }, tooltip: {}, legend: { data: ['人物'] }, series: [{ type: 'graph', layout: 'force', symbolSize: 50, roam: true, label: { show: true }, edgeSymbol: ['circle', 'arrow'], edgeSymbolSize: [4, 10], edgeLabel: { fontSize: 12 }, data: [{ name: 'Person A' }, { name: 'Person B' }, { name: 'Person C' }], links: [{ source: 'Person A', target: 'Person B' }, { source: 'Person B', target: 'Person C' }], lineStyle: { opacity: 0.9, width: 2, curveness: 0 } }] }; chart.setOption(option); </script> </body> </html> ``` 在上面的代码中,我们创建了一个人员关系,包含了三个人物(Person A、Person B、Person C)。人物之间的关系通过 links 数组来定义,每个链接包含了源节点和目标节点。通过调整配置项中的参数,可以进一步定制表的样式和功能。 以上只是一个简单的示例,实际使用中可以根据需要进行更复杂的配置和数据处理。你可以根据自己的需求来修改代码,以实现你想要的人员关系效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值