平面数据集的Squarified treemap算法?

时间:2013-09-10 15:12:15

标签: algorithm treemap

目前我使用切片&骰子方法:

  • 获取值和标签列表
  • 计算所有值的总和
  • 通过将每个值除以总和
  • 来计算比率 每个列表项
    • 使用height=1width=ratio
    • 绘制一个框
    • 在框顶部绘制标签

1 个答案:

答案 0 :(得分:1)

让我按照我的理解重述你的问题。

你知道你需要绘制并装入正方形的一堆矩形的区域,并且你想要使用没有极高/宽度比的矩形。每个矩形表示给定标签所占总值的一部分。问题是弄清楚这些矩形的形状和位置应该是什么样,它们完全吻合,每个都有所需的区域。

你不需要一个完美的答案。只有一个比电流好,只是将方形切成垂直条。

这是我的建议。推广到targt矩形中的矩形拟合。 (这让我们可以使用递归。)此外,我将假设标签已按区域排序,首先是最大的。 (排序是一个很容易添加的步骤。)然后根据以下递归规则找出矩形的位置:

  1. 如果列表中的第一个元素超过区域的1/3,则将目标矩形的长边拆分为第一个元素,然后将其他所有元素分开,然后以其他方式递归拟合其余部分。
  2. 否则将您的列表拆分为两个,区域的中位数将进入第一个列表。将目标矩形分为两个,一个用于第一个列表,一个用于第二个列表。递归填充每个矩形。
  3. 对于大多数数据集,这应该为您的目的提供相当好的划分。它的计算速度应该相当快,只有最小的矩形才能具有比3到1更高的比率。