查看 echarts 关系图的每个 node 的 xy 坐标

本文详细介绍了一段使用ECharts绘制复杂关系图的代码实例,包括节点与边的定义、样式设置及如何通过控制台查看节点坐标等关键信息。

一段 echarts 关系图代码

test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
    <script type="application/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="application/javascript" src="js/echarts.js"></script>
</head>
<body>
    <div id="myChartDiv" style="width: 500px; height: 400px"></div>
</body>

<script type="text/javascript">
    let myChart = echarts.init(document.getElementById('myChartDiv'));

    let option = {
        series: [
            {
                type: 'graph',
                layout: 'none',
                symbolSize: 50,
                roam: true,
                label: {
                    normal: {
                        show: true
                    }
                },
                edgeSymbol: ['circle', 'arrow'],
                edgeSymbolSize: [4, 10],
                edgeLabel: {
                    normal: {
                        textStyle: {
                            fontSize: 20
                        }
                    }
                },
                data: [{
                    name: '节点1',
                    x: 300,
                    y: 300
                }, {
                    name: '节点2',
                    x: 800,
                    y: 300
                }, {
                    name: '节点3',
                    x: 550,
                    y: 100
                }, {
                    name: '节点4',
                    x: 550,
                    y: 500
                }],
                // links: [],
                links: [{
                    source: 0,
                    target: 1,
                    symbolSize: [5, 20],
                    label: {
                        normal: {
                            show: true
                        }
                    },
                    lineStyle: {
                        normal: {
                            width: 5,
                            curveness: 0.2
                        }
                    }
                }, {
                    source: '节点2',
                    target: '节点1',
                    label: {
                        normal: {
                            show: true
                        }
                    },
                    lineStyle: {
                        normal: { curveness: 0.2 }
                    }
                }, {
                    source: '节点1',
                    target: '节点3'
                }, {
                    source: '节点2',
                    target: '节点3'
                }, {
                    source: '节点2',
                    target: '节点4'
                }, {
                    source: '节点1',
                    target: '节点4'
                }],
                lineStyle: {
                    normal: {
                        opacity: 0.9,
                        width: 2,
                        curveness: 0
                    }
                }
            }
        ]
    };

    myChart.setOption(option);

    console.log(myChart);

</script>
</html>

查看 echarts 关系图的每个 node 的 xy 坐标

开 F12,上段代码中的console.log(myChart);会在控制台打印出 myChart 变量的内容。每个 node 的 xy 坐标在 myChart 变量的 _chartsMap/_ec_ series 0 0_series.graph/_symbolDraw/_data/_itemLayouts 处,或者 _chartsViews[0]/_symbolDraw/_data/_itemLayouts 处。

Echarts 关系图内容太多导致坐标失效时,可以尝试以下几种方法来解决: ### 数据采样 对原始数据进行采样,减少显示的数据量。例如,只显示关系图中最重要的节点和边。可以根据节点的重要性指标(如度中心性、介数中心性等)进行筛选。 ```javascript // 示例:假设 data 是原始节点数据,links 是原始边数据 // 筛选出度大于某个阈值的节点 const degreeThreshold = 5; const importantNodes = data.filter(node => { const degree = links.filter(link => link.source === node.name || link.target === node.name).length; return degree > degreeThreshold; }); // 筛选出与重要节点相关的边 const importantLinks = links.filter(link => { const sourceIncluded = importantNodes.some(node => node.name === link.source); const targetIncluded = importantNodes.some(node => node.name === link.target); return sourceIncluded && targetIncluded; }); option = { series: [ { type: 'graph', data: importantNodes, links: importantLinks } ] }; ``` ### 动态加载 采用动态加载的方式,当用户进行缩放、平移等操作时,再加载更多的数据。可以通过监听 Echarts 的事件来实现。 ```javascript myChart.on('zoom', function () { // 根据当前的缩放级别和视野范围,动态加载数据 // 这里只是示例,实际需要根据具体情况实现数据加载逻辑 const currentZoom = this.getOption().series[0].zoom; if (currentZoom > 1.5) { // 加载更多数据 // 更新 option 并重新渲染图表 myChart.setOption(newOption); } }); ``` ### 布局优化 使用合适的布局算法,让节点和边分布更合理。Echarts 提供了多种布局方式,如力引导布局、环形布局等。可以根据数据特点选择合适的布局。 ```javascript option = { series: [ { type: 'graph', layout: 'force', // 使用力引导布局 force: { repulsion: 100, // 节点之间的斥力 edgeLength: 50 // 边的长度 } } ] }; ``` ### 分块显示 将关系图分成多个小块,每个小块单独显示。用户可以通过切换小块来查看不同部分的关系图。可以通过数据的分类或层次结构进行分块。 ```javascript // 假设数据可以根据某个属性进行分类 const category1Nodes = data.filter(node => node.category === 1); const category1Links = links.filter(link => { const sourceIncluded = category1Nodes.some(node => node.name === link.source); const targetIncluded = category1Nodes.some(node => node.name === link.target); return sourceIncluded && targetIncluded; }); // 为每个小块创建一个 Echarts 图表 const chart1 = echarts.init(document.getElementById('chart1')); const option1 = { series: [ { type: 'graph', data: category1Nodes, links: category1Links } ] }; chart1.setOption(option1); ```
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值