1

我正在为包含大量业务需求(70 个数据元素)的 excel 文档开发可视化工具。

目的是显示一些数据的内部结构,这些结构在盯着 excel 文件时并不是很明显。结构看起来像这样:

根-->(

(组件 1)--->(子组件 a)--->(数据元素 1,数据元素 2,...,数据元素 30),

(组件 2)--->(子组件 a)--->(数据元素 1,数据元素 2,...,数据元素 30),

(组件 3)--->(子组件 a)--->(数据元素 2,数据元素 2,...,数据元素 30)

)

我注意到的是:

图表擅长展示结构,但不擅长展示数据。表格擅长展示数据,但不擅长展示结构。

此时我不能再使用 GraphStream 的默认自动布局。由于附加到单个子组件的大量数据元素,自动布局无法以不重叠且无法读取的方式定位这些元素。发生的是一种花朵效应,其中数据元素就像在其父对象周围重叠的花瓣。

如果我禁用自动布局,我必须自己定位节点。Graphstream 说:

您可以根据需要固定坐标。您使用的单位将被称为“图形单位”。但是,正如您稍后将看到的,查看器支持另外两种单位:像素和百分比。

http://graphstream-project.org/doc/Tutorials/Graph-Visualisation/1.0/

好吧,事实证明,要么这是一个难题,要么我很慢。我一直无法定位节点是一种可读的方式。

我尝试过的事情:

  • 相对于父级定位子级:使用 for 循环遍历节点(回想起来,可能值得递归地实现它以支持 n 级),从 root 开始。确定根的子节点数除以 2(3/2 = 1 整数除法)称为中间值。将组件 1 X 位置设置为 i - 中间。将 y 位置设置为根 y 位置 - 1。通过这种方式,我可以创建一个“树”结构,其中父级位于其子级之上。

别人家的孩子,这个世界怎么了……

不幸的是,这在实践中效果不佳。任何单个组件都可以但是如果在同一级别上还有其他父母,他们的孩子会与其他父母的孩子重叠。发生这种情况是因为孩子的位置相对于他们的父母,他们不知道事实上,他们想要进入的位置已经被别人的孩子占据了。

所以现在我不知道该怎么办。考虑到尚不存在的节点,我无法定位节点。我有一些想法片段,但它们看起来都很复杂。

因此,在我冒险研究地狱代码之前,我提出了这个问题,因为我觉得我不可能是第一个必须绘制可读图形的人,并且可能有既定的方法可以做到这一点。

作为参考,这些是想法片段:

  • 让各个图形元素对自己的位置负责,并让他们相对于他们的孩子或缺乏他们的孩子来定位自己。

    • 研究结合一些定位解决方案来操纵相机。限制在给定时间可见的节点数量(如果太多,则杀死其他人的孩子)。根据单击的组件使用缩放和平移。

    • 递归。是我知道的一个词。开个玩笑,我以前用过递归,我觉得图,尤其是像我这样没有循环结构的图,实际上是在寻求递归解决方案。实际上,我在另一个项目中使用了递归方法来绘制图形,但我最终遇到了同样的情况。我如何知道绘制其他父母孩子的递归路径?我仍然应该集思广益一些递归方法。

    • 在视口中创建一个表示相对不动产的新数据结构。分割成区域,节点占据相对区域,2个节点不能占据同一个相对区域。弄清楚当有人试图坐在别人的孩子身上时该怎么办。实际上,我在写这篇文章时想出了这个。

我就这些了,大家觉得呢?是否有一些众所周知的节点定位算法已经解决了我的问题?我的哪个想法片段听起来最有希望?

4

0 回答 0