8

我有兴趣使用 python 根据正方形的大小(以及可选的颜色)制作表示值大小的图表。基本上我正在寻找一种方法来概述一堆值,比如好的旧程序windirstat与硬盘使用有关(它基本上使一个大方块代表您的硬盘驱动器,然后组成其内部区域的较小方块代表不同的程序,方块越大文件越大,颜色表示文件类型)。我对 matplotlib 相当熟悉,我认为用它做这样的事情是不可能的。是否有任何其他 python 包可以提供帮助?如果不是,对更低级别的东西有什么建议吗?如果我能找到一种以编程方式绘制框的方法,我想我可以手动完成(我并不关心格式,但导出 SVG 和 PNG 的选项会很好)。

最终,最好让它像 windirstat 那样具有交互性,如果你将鼠标悬停在特定的方块上,你会得到更多关于它的信息,如果你点击它,也许你会进去看看它的构成特别的广场。我只熟悉用于 GUI 的 wxpython,不确定它是否可以用于这样的事情。现在我很高兴只输出它们。

非常感谢!亚历克斯

编辑:谢谢大家,您的两个答案都有很大帮助。

4

2 回答 2

8

您正在寻找Treemapping算法。实现后,您可以将输出(应该是矩形)转换为可以绘制分层矩形的任何内容的绘图命令。

编辑:

更多链接和信息:

如果您不介意阅读论文,基于浏览器的d3库提供了“方形”树形图(js 实现)。他们参考了Bruls、Huizing 和 van Wijk的这篇论文。(这也是维基百科文章中的引文 3)

我会搜索链接的维基百科文章中列出的算法。例如,他们还链接到这篇文章,该文章描述了一种“混合树图”算法。该论文最后还包括一些有趣的部分,描述了向非矩形形状的转换。

Squarified 显然是最常见的品种。上面的链接应该足以让您找到解决方案,甚至直接移植 d3 实现。但是,了解 d3 模型(类似于 jQuery 的声明形式)的成本可能有点高。不过,乍一看,实现似乎相对简单。

于 2012-01-15T18:58:37.283 回答
2

Squaremap做到了这一点。我没有使用过它(我只从RunSnakeRun知道它)并且它的文档严重缺乏,但它似乎工作。

于 2012-01-15T18:41:23.583 回答