Cytoscape.js 是一个开源的图可视化库,用于在 Web 页面上展示交互式的图形网络,它提供了丰富的功能和灵活的 API,使得开发者可以轻松地创建、操作和分析复杂的图形结构,下面将通过一个实例来详细介绍如何使用 Cytoscape.js 创建一个基本的图形可视化应用。
实例:使用 Cytoscape.js 创建一个简单的社交网络图
在你的 HTML 文件中引入 Cytoscape.js 的核心库和样式文件,你可以通过 CDN 引入:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Cytoscape.js Example</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.20.0/cytoscape.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.20.0/cytoscape.min.css"> </head> <body> <div id="cy"></div> <script> // JavaScript code will go here </script> </body> </html>
在<script>
标签中,首先获取页面中的容器元素,并初始化 Cytoscape 实例:
var cy = cytoscape({ container: document.getElementById('cy'), // 容器元素 elements: [ // 初始元素集合 { data: { id: 'a', label: 'Node A' } }, { data: { id: 'b', label: 'Node B' } }, { data: { id: 'c', label: 'Node C' } }, { data: { id: 'ab', source: 'a', target: 'b' } }, { data: { id: 'bc', source: 'b', target: 'c' } }, { data: { id: 'ca', source: 'c', target: 'a' } } ], style: [ // 样式配置 { selector: 'node', style: { 'background-color': '#666', 'label': 'data(label)' } }, { selector: 'edge', style: { 'width': 3, 'line-color': '#ccc', 'target-arrow-color': '#ccc', 'target-arrow-shape': 'triangle' } } ], layout: { name: 'grid' } });
为了使图形具有交互性,可以添加事件监听器,例如点击节点时显示详细信息:
cy.on('tap', 'node', function(evt){ var node = evt.target; var popupText = `ID: ${node.id()} Label: ${node.data('label')}`; var popup = node.popper({ content: popupText, gravity: 'top', padding: 10, backgroundColor: '#f7f7f7', boxShadow: '0px 2px 15px -5px rgba(0,0,0,0.4)' }); node.popperRef().show(); });
以下是完整的 HTML 和 JavaScript 代码示例:
| 部分 | 代码 |
| –| –|
| HTML | “html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Cytoscape.js Example</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.20.0/cytoscape.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.20.0/cytoscape.min.css"> </head> <body> <div id="cy"></div> <script> var cy = cytoscape({ container: document.getElementById('cy'), elements: [ { data: { id: 'a', label: 'Node A' } }, { data: { id: 'b', label: 'Node B' } }, { data: { id: 'c', label: 'Node C' } }, { data: { id: 'ab', source: 'a', target: 'b' } }, { data: { id: 'bc', source: 'b', target: 'c' } }, { data: { id: 'ca', source: 'c', target: 'a' } ] }, style: [ { selector: 'node', style: { 'background-color': '#666', 'label': 'data(label)' } }, { selector: 'edge', style: { 'width': 3, 'line-color': '#ccc', 'target-arrow-color': '#ccc', 'target-arrow-shape': 'triangle' } } ], layout: { name: 'grid' } }); cy.on('tap', 'node', function(evt){ var node = evt.target; var popupText =
ID: ${node.id()}
Label: ${node.data(‘label’)}; var popup = node.popper({ content: popupText, gravity: 'top', padding: 10, backgroundColor: '#f7f7f7', boxShadow: '0px 2px 15px -5px rgba(0,0,0,0.4)' }); node.popperRef().show(); }); </script> </body> </html>
“
Q1: Cytoscape.js 支持哪些布局算法?
A1: Cytoscape.js 支持多种布局算法,包括但不限于 grid(网格)、random(随机)、circle(圆形)、cose(压缩弹簧嵌入)、dagre(有向无环图)等,你可以在layout
配置选项中指定所需的布局算法。
Q2: 如何在 Cytoscape.js 中动态添加或删除节点和边?
A2: 你可以使用 Cytoscape 实例的add
和remove
方法来动态添加或删除节点和边,要添加一个新的节点,可以使用以下代码:
cy.add([ { data: { id: 'd', label: 'Node D' } } ]);
要删除一个节点,可以使用以下代码:
cy.remove('#d');
类似地,你可以使用cy.add
和cy.remove
方法来添加或删除边。
Cytoscape.js 是一个非常强大的图形可视化工具,适用于各种领域,如社交网络分析、生物信息学、知识图谱等,通过本文的实例,你应该对如何使用 Cytoscape.js 创建基本的图形可视化有了初步的了解,如果你有更复杂的需求,建议查阅官方文档,以获取更多高级功能和配置选项。