Performance XSLT创建复杂的SVG可视化,最小化线交叉等

Performance XSLT创建复杂的SVG可视化,最小化线交叉等,performance,xslt,svg,visualization,Performance,Xslt,Svg,Visualization,这不是一个实际的单一编码问题,而是一个如何正确处理复杂问题的问题 因此,我使用xslt构建了一个相当复杂的XML数据svg可视化。看起来是这样的: (来源:) 这只是整个数据的一个小样本。有两三排。每行最多可包含160个黄色框 (黄色框为信件集合,蓝色/灰色框为单个信件,线条代表其传播方式。) 到目前为止,它运行良好,但我想对其进行优化: (1) 尽量减少线路交叉的次数 (2) 尽量减少穿过蓝色/灰色框的线数 (3) 尽量减少线路与另一条线路太近 要实现这一目标,需要采取以下措施: (a) 最

这不是一个实际的单一编码问题,而是一个如何正确处理复杂问题的问题

因此,我使用xslt构建了一个相当复杂的XML数据svg可视化。看起来是这样的:


(来源:)

这只是整个数据的一个小样本。有两三排。每行最多可包含160个黄色框

(黄色框为信件集合,蓝色/灰色框为单个信件,线条代表其传播方式。)

到目前为止,它运行良好,但我想对其进行优化:

(1) 尽量减少线路交叉的次数

(2) 尽量减少穿过蓝色/灰色框的线数

(3) 尽量减少线路与另一条线路太近

要实现这一目标,需要采取以下措施:

(a) 最宽的行(在示例中是第三行)是fix。它不能移动。但其他(两个)可以在最宽行的宽度范围内移动。即,在我的示例中,第二行的黄色框可以向右移动约160像素

(b) 此外,在两个较小的行中,黄色框之间的边距可以变化。在我的示例中,每行只有一个。但当然,在两行中可能有不止一个黄色方框

(c) 一行中黄色方框的顺序可以更改

所以,很多人都有可能实现这种可视化。 问题在于性能时间

我已经开始使用一个函数来处理交叉线问题,该函数预先构建了可视化并计算了交叉点的数量。 交叉次数最少的变量实际上构建在输出中。 问题是它需要的时间。只有100个可能性和my hole XML数据的转换耗时90秒。听起来不算多,但考虑到100种变体只是所有理论上可能的选项中的一小部分,而且在未来的某个时候,可视化应该构建在服务器上,供用户选择90秒的数据,这实在是太多了。 我已经将用于计算交叉口功能的可视化模板缩减为所有必要的内容,并保留所有标题等。这确实有帮助,但没有预期的那么多


线的绘制如下:首先,绘制所有框,使其id与原始数据保持一致。然后我回到我的数据,查看连接的位置并构建行。

您可以通过XSLT将XML转换为点语言(纯TXT格式),然后通过GraphViz进行处理。我用这种方法解决了一些类似的问题(虽然不像你的问题那么大)。

我在一些非常复杂的图形上使用了相同的技术:虽然我没有直接转换成点,但转换成了DotML()。我发现“调整”线路的布线有点棘手,但这个工具有很多功能,我没有探究。当然比为自己写要好。谢谢!我一定会试一试。但我不太确定GraphViz能否在我自己的代码中完成我现在所做的一切(每个框都有一个指向我的数据的链接,有鼠标悬停的效果,正如你所看到的,背景取决于数据)。