ECharts - 图网络(Graph)图表

764 阅读3分钟

在ECharts中,type: "graph" 用于创建一个图网络(Graph)图表,这种图表非常适合展示节点(nodes)之间的关系(edges)。下面是一个简单的 type: "graph" 的ECharts配置样例,用于展示几个节点和它们之间的连接关系。

var myChart = echarts.init(document.getElementById('main'));  
  
var option = {  
    title: {  
        text: '图网络(Graph)示例'  
    },  
    tooltip: {},  
    series: [  
        {  
            type: 'graph',  
            layout: 'none', // 图的布局。'none' 表示不采用任何布局,使用原始数据中边的信息来展示图。  
            roam: true, // 是否开启鼠标缩放和平移漫游。  
            data: [  
                {name: '节点1', x: 200, y: 200, symbolSize: 50},  
                {name: '节点2', x: 400, y: 200, symbolSize: 50},  
                {name: '节点3', x: 600, y: 200, symbolSize: 50},  
                {name: '节点4', x: 800, y: 200, symbolSize: 50}  
            ],  
            // 定义节点之间的边  
            links: [  
                {source: '节点1', target: '节点2'},  
                {source: '节点2', target: '节点3'},  
                {source: '节点3', target: '节点4'},  
                {source: '节点4', target: '节点1'}  
            ],  
            // 边的样式  
            lineStyle: {  
                opacity: 0.9,  
                width: 2,  
                curveness: 0  
            },  
            // 节点样式  
            itemStyle: {  
                borderColor: '#fff',  
                borderWidth: 1  
            },  
            label: {  
                show: true,  
                position: 'inside'  
            }  
        }  
    ]  
};  
  
myChart.setOption(option);

在这个例子中,我们创建了一个包含四个节点(节点1, 节点2, 节点3, 节点4)的图网络,这些节点通过 links 数组定义的关系相互连接,形成了一个闭环。我们设置了 layout: 'none',这意味着节点的位置是根据 data 中 x 和 y 的值来确定的,而不是通过图布局算法来自动计算。此外,我们还可以通过 lineStyle 和 itemStyle 来定制边和节点的样式。

请确保你的HTML文件中有一个ID为 main 的元素,用于挂载ECharts图表。同时,确保已经正确引入了ECharts的JS库。

<div id="main" style="width: 600px;height:400px;"></div>  

注意,ECharts的版本可能随时间而更新,请根据需要引入相应版本的ECharts库。

将ECharts的graph系列中的layout设置为'force'时,图表的节点会根据力导向图(Force-Directed Graph)算法自动布局。在力导向图中,节点之间的连接(边)会产生力,这些力影响节点的位置,最终使得整个图看起来平衡且美观。

要设置界面以适应力导向图的布局,你可以考虑以下几个方面:

  1. 容器大小:确保图表的容器(即HTML中的DOM元素)具有足够的宽度和高度,以便能够容纳所有节点和边,并且使图表看起来不会过于拥挤。
  2. 初始位置:虽然设置了layout: 'force'后,节点的初始位置会被算法忽略,但你可以通过data中的xy属性为节点提供一个大致的起始位置,这有助于算法更快地找到平衡状态。
  3. 力导向图的参数:ECharts提供了多个配置项来调整力导向图的行为,包括repulsion(斥力强度)、gravity(重力强度)、edgeLength(边的期望长度)等。通过调整这些参数,你可以控制节点的分布和图的紧凑程度。
  4. 节点和边的样式:为了增强图表的视觉效果,你可以通过itemStylelineStyle来设置节点和边的样式,包括颜色、大小、边框等。
  5. 交互性:ECharts的力导向图支持多种交互方式,如拖拽节点、缩放和平移图表等。你可以通过roam属性来启用这些交互功能。

下面是一个设置了layout: 'force'graph系列的基本示例:

var myChart = echarts.init(document.getElementById('main'));  
  
var option = {  
    title: {  
        text: '力导向图示例'  
    },  
    tooltip: {},  
    series: [  
        {  
            type: 'graph',  
            layout: 'force',  
            roam: true, // 启用缩放和平移  
            data: [  
                {name: '节点1'},  
                {name: '节点2'},  
                {name: '节点3'},  
                // 更多节点...  
            ],  
            links: [  
                {source: '节点1', target: '节点2'},  
                {source: '节点2', target: '节点3'},  
                // 更多边...  
            ],  
            // 力导向图的参数  
            force: {  
                repulsion: 500,  
                gravity: 0.2,  
                edgeLength: [10, 50]  
            },  
            // 节点和边的样式  
            itemStyle: {  
                borderColor: '#fff',  
                borderWidth: 1  
            },  
            lineStyle: {  
                color: 'source',  
                curveness: 0.3  
            },  
            label: {  
                show: true,  
                position: 'inside'  
            }  
        }  
    ]  
};  
  
myChart.setOption(option);

请注意,上述代码中的force对象包含了力导向图的一些基本配置参数,你可以根据需要调整这些参数的值。此外,ECharts的文档和示例页面是了解更多高级配置和技巧的好资源。