绘制具有较高子女父母比率的图表的算法

时间:2017-03-02 17:08:02

标签: java algorithm recursion graph-algorithm graphstream

我正在为包含相对大量业务需求(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开始。确定root的子节点数除以2(3/2 = 1,整数除法)调用此中间值。将组件1 X位置设置为i - middle。将y位置设置为根y位置 - 1.这样我就可以创建一个'树'父母坐在其孩子顶部的结构。
  

其他人的孩子对这个世界有什么不妥......

不幸的是,这在实践中并不顺利。任何单个组件 ok 但如果同一级别上有其他父母,则他们的孩子与其他所有父母的孩子重叠。之所以发生这种情况,是因为孩子们相对于父母而言,并且不知道他们想要进入的位置已经被其他人的孩子占用了。

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

因此,在我冒险进入地狱代码之前,我提出了这个问题,因为我觉得我可能不是第一个必须绘制可读图形的人,并且可能已经建立了这样做的方法。

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

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

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

    • 递归。这是我所知道的一个词。除了开玩笑之外,我之前使用了递归,并且我感觉到图形,特别是像我这样没有循环结构的图形,实际上要求递归解决方案。我实际上在一个不同的项目中使用递归方法绘制图形,但我最终处于同样的情况。如何知道绘制其他父母的孩子的递归路径?我仍然应该集体讨论一些递归方法。

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

我得到的全部,你们怎么想?是否有一些众所周知的节点定位算法已经解决了我的问题?我的哪些想法片段听起来最有希望?

0 个答案:

没有答案