【发布时间】:2012-07-03 01:36:59
【问题描述】:
我最近读了很多关于 Java 和 Javascript 的图形库的文章,但我还没有找到一个好方法来做我想做的事。
基本上我有一个关于一堆元素(多达数千个)的集合层次结构。这些集合可以完全或部分重叠、完全覆盖或完全不相交。我想做的是显示以下信息:
- 集合的大小(相对于其他集合)
- 根据其涵盖的元素计算出的一组“热”值(以颜色代码表示)
- 单个图形中集合的完整拓扑(以便向用户显示重叠、交叉等)
编辑:也许我应该举一个例子来说明我所说的集合和元素以及部分重叠的层次结构。以下是我处理的那种集合的过度简化版本(请注意,数字 1-10 和字母 a-h 和 X 表示可相互比较的元素):
Set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
Set2 = {1, 2, 3, 4, 5, 6}
Set3 = {1, 2, 3}
Set4 = {1, 4, 5, 6, 7}
Set5 = {a, b, c, d, e, f, g, h}
Set6 = {a, b, c, d, e}
Set7 = {a, b, c, 7}
Set8 = {2, 4, 7, 8, c, f}
Set9 = {X}
我不确定如何以直观的方式显示这些信息。我看过 Voronoi ¹,² 图表,我真的很喜欢视觉上的,但是它们有不同的数学背景,所以我认为我无法以适当的方式描绘我所拥有的层次结构。我想在运行时(在 Java 的情况下)创建这些图表,或者在 HTML 部署的情况下使用 Javascript,两者都很好。然而,有一个约束条件是图形需要创建或可以导出为高分辨率矢量图形。
简而言之我的问题:
- 有没有一种很好的方法来可视化我拥有的数据类型?如果是这样,它是否以易于实现的形式存在(即库)?
- 如果问题没有简单的解决方案,换句话说,如果我需要在这种情况下发明轮子,我该如何自己实现这样的图表?什么是好的起点?我需要特别注意什么?
谢谢!
编辑:我的潜在想法是将通用集合中的所有元素布局为具有所需颜色覆盖的六边形网格,然后绘制集合的边界。然而,这个想法有几个问题,特别是为元素指定位置的问题,因此集合不会在整个图上分裂。任何cmets /建议?
【问题讨论】:
-
我们在谈论多少套?对于小数字,Symmetric Venn diagrams 涵盖所有可能性,但并不特别注意层次结构
-
肯定有数百,在许多情况下接近一千,有时甚至更多......
-
您能描述一下这些集合代表什么以及可视化将如何帮助分析吗?
-
也许你应该看看 Matlab。
-
和弦图可能是一个有用的工具:mbostock.github.com/d3/ex/chord.html。对每个集合中的元素进行排序,将每个集合表示为圆边缘上的弧,集合交点将由弧之间的弦表示,并且弦颜色可能用作指示相交程度的热图。在该设计中,弧线组合之间可能会绘制多个弦。
标签: java javascript data-visualization graph-algorithm