javascript - 如何使用大量数据(Visjs、cytoscape、sigma 和 vivaGraph)快速绘制社交网络?
问题描述
我必须创建一个包含大量数据的社交网络。我用visJs,网络很慢。
我尝试了这些插件:Cytoscape、visJs、Vivagraph 和 sigma。
Visjs、cytoscape 和 sigma 的问题
- 他们很慢
vivaGraph 的问题
- 我不能用 svgGraph 渲染 webglGraph,所以我不能有很多节点和边,并在边上放一个箭头。
vivaGraph的优势:
他真的很快,因为我可以用 webGl 渲染图形。但我不能或者我不知道如何使用这个插件添加图形。
使用 visjs:
- 我可以快速初始化图表,因为我可以将位置保留在数据库中,并且可以停用物理。
问题是我无法进行任何更改,因为当动态添加一个点时,必须重新计算所有其他点,而且 visJs 太长了。
我有并且我想要这样的东西(用 visJs 完成): 我希望能够做到这一点:
修改节点和边缘颜色、大小、名称等。
使用最少 10 000 个节点快速更新和生成图形。
布局类似于我展示的布局(如果可能按颜色分组)
所以我有两个问题:
有没有办法在初始化后用 visjs 快速动态添加?
知道我至少有 10,000 个节点,如何快速生成图表?
有没有一种技术可以快速生成具有良好布局的图形?
解决方案
我用 VivagraphJS 的子库找到了一个类似问题的解决方案。
我的问题是建立一个非常大的图表(全部(或部分)交易比特币)。
我决定使用ngrah.*模块,这些模块针对速度进行了非常优化。
嗯,ngraph.* 模块的介绍在自述文件中,但是这些模块提供了在你的图中进行个人渲染的可能性。
这些模块是:
- ngraph.graph:导入图结构的基本模块,如 addNode() 和 addLink()。
- ngraph.forcelayout:构建 2D 布局并在此处存在 3D 版本
有很多子模块,慢慢来看看。
对于大图,可以离线使用预计算布局,有两个模块可以使用:
- ngraph.native:它使布局脱机,制作带有
.bin
扩展名的文件。 - ngraph.offline.layout:它在你的图表加载之后和你的图表绘制之前进行布局。
您可以使用不同的子模块绘制图形,例如ngraph.pixel
结论
我认为绘制图形和大图形是一个非常好的开源解决方案,接下来我将使用我的子模块发布我的配置,最后我将发布我的项目的链接和一个 youtube 视频。
配置
- ngraph.graph。
- ngraph.pixel。
- ngraph.fromprecompute:我的子模块,用于从预计算文件加载图形并绘制结果。
你可以在youtube上找到一个视频
我的项目的源代码在这里,也许它可以帮助你。
希望我的回答对你有所帮助。
推荐阅读
- mysql - SQL 内联多表一次查询
- qt - Qml ChartView BarSeries 检索鼠标位置 onHovered 事件
- mysql - 表中的一列引用 SQL 中存在重复数据的另一列
- javascript - 裁剪不适用于旋转图像javascript
- sequelize.js - JSDoc如何在不创建新的typedef的情况下将成员添加到类型
- android - 如何使用recyclerview成功创建对话框片段?
- awk - 用于解析由新行分隔的文件的 awk 命令
- python - 将命令传递到通过 bat 文件打开的命令提示符
- spring-boot - 在 Spring Boot 中发送邮件时出现空异常?
- python - 如何在python数组中制作连续随机NaN