聚类图可视化技术
我需要可视化一个相对较大的图(6K 个节点,8K 个边),它具有以下属性:
- 不同的簇。每个集群大约 50-100 个节点,集群级别的互连性中等 集群
- 之间的互连性最小(每个集群 5-10 个集群间边缘)
令全局边缘重叠 = 直接可视化集群图导致的边缘重叠 = {A, B , C, D, E},边 = 这些簇的{五角星,这是非顺便说一句,如果直接画出来肯定会产生边缘重叠}
让局部边缘重叠=上面的但是{A,B,C,D,E}只是节点。
我需要以满足以下要求的方式用上述方式可视化图形
- 没有全局边缘重叠(即由簇间属性引起的边缘重叠是不行的)
- 簇内的局部边缘重叠很好
任何人都对如何最好地可视化有想法符合上述要求的图表?
我提出的一种处理全局边缘重叠的解决方案是确保在可视化期间集群 A 最多只能有 1 个到另一个集群 (B) 的直接边缘。簇A->簇之间的任何附加簇间边缘C、A-> D,...断开连接,并且附加节点/边A→→。 A_C,C-> C_A,A-> A_D、D-> D_A...已创建。
有人有什么想法吗?
I need to visualize a relatively large graph (6K nodes, 8K edges) that has the following properties:
- Distinct Clusters. Approximately 50-100 Nodes per cluster and moderate interconnectivity at the cluster level
- Minimal (5-10 inter-cluster edges per cluster) interconnectivity between clusters
Let global edge overlap = The edge overlaps caused by directly visualizing a graph of Clusters = {A, B, C, D, E}, Edges = {Pentagram of those clusters, which is non-planar by the way and will definitely generate edge overlap if you draw it out directly}
Let Local Edge Overlap = the above but { A, B, C, D, E } are just nodes.
I need to visualize graphs with the above in a way that satisfies the following requirements
- No global edge overlap (i.e. edge overlaps caused by inter-cluster properties is not okay)
- Local edge overlap within a cluster is fine
Anyone have thoughts on how to best visualize a graph with the requirements above?
One solution I've come up with to deal with the global edge overlap is to make sure a cluster A can only have a max of 1 direct edge to another cluster (B) during visualization. Any additional inter-cluster edges between cluster A -> C, A -> D, ... are disconnected and additional node/edges A -> A_C, C -> C_A, A -> A_D, D -> D_A... are created.
Anyone have any thoughts?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
Prefuse 内置了一些很好的图形绘制链接文本算法,并且它似乎可以相对较好地处理相当大的图形。您可以尝试构建在 Prefuse 之上的流程图布局。
Prefuse has some good graph drawing link text algorithms built in and it seems to handle fairly large graphs relatively well. You might try Flow Map Layout which is built on top of Prefuse.
鉴于您的目标,我认为 Fruchterman-Reingold 算法 做得相当不错防止边缘重叠。例如,请参阅此屏幕截图,该网络由使用 Fruchterman-Reingold 算法绘制的多个组件组成。 IGraph 内置了对此算法的支持(Networkx 我相信)并且速度非常快。
Given your objectives, I think that the Fruchterman-Reingold algorithm does a pretty decent job of preventing edge overlap. See for example this screenshot of a network consisting of multiple components drawn using the Fruchterman-Reingold algorithm. IGraph has built-in support for this algorithm (as does Networkx I believe) and is really fast.
有一个基于 Prefuse 构建的程序,名为 SocialAction。你必须向作者索取代码,但它会为你对图进行大量统计分析,例如识别子图。我已经在具有超过 18,000 个节点的图表上使用了它,尽管在这种规模下速度非常慢,但它仍然有效。
There is a program built on top of Prefuse called SocialAction. You have to request the code from the author, but it does a lot of statistical analysis on the graph for you, such as identifying subgraphs. I've used it on a graph with more than 18,000 nodes, and although it is very slow at that scale it still works.
尽管此时问可能很愚蠢,但您是否尝试过 http://www.graphviz.org/?
Although it may be silly to ask at this point, had you tried out http://www.graphviz.org/ ?
我还没有看到太多的图形可视化工具支持在图形中直观地分离集群。一种选择可能是查看 WilmaScope。它看起来对基于集群的布局有一些支持。
I haven't seen too many graph visualization tools that support separating clusters within a graph visually. One option might be to take a look at WilmaScope. It looks to have some support for cluster based layouts.
有机布局可以很好地管理 yFiles 框架中的集群图。首先在 yEd 中尝试,看看它是否满足需要。为每个集群使用嵌套图别名组可能是合理的。有机布局具有称为“组布局策略”的功能,如果需要使用不同的集群间和集群内边缘原则以及增量布局来完成布局,则可以使用该功能。经过一番努力,人们可以将图转换为 GraphML 以避免手动工作。
Organic layout manages fairly well clustered graphs in yFiles framework. Try first in yEd to see if it does what needed. It is probably reasonable to use nested graphs alias groups for each cluster. Organic layout has feature called Group Layout Policy which can be used if layout needs to be done using different principles for inter-cluster and intra-cluster edges, with incremental layouting. With some effort, one can translate graph into GraphML to avoid manual work.