Python如何制作类似于Windirstat的图表?

9
我想使用Python制作基于正方形大小(和可选的颜色)的值大小图表。基本上,我正在寻找一种方法来概述一堆值,就像旧程序windirstat对硬盘使用情况所做的那样(它基本上创建一个表示您硬盘的大正方形,然后由较小的正方形组成,表示其中不同的程序,正方形越大,文件越大,颜色表示文件类型)。我对matplotlib相当熟悉,我不认为它能够做到这样的事情。是否有其他Python软件包可以帮助?如果没有,是否有更低级别的建议?如果我能找到以编程方式绘制框的方法,我想我可以手动完成它(我不真的关心格式,但导出SVG和PNG的选项也很好)。
最终,希望它像Windirstat一样具有交互性,如果您将鼠标悬停在特定的方块上,则会获得更多信息,如果单击该方块,则可能会进入并查看该特定方块的构成。我只熟悉wxpython用于GUI,不确定它是否可用于此类事情。现在,我只想输出它们就可以了。
非常感谢! Alex
编辑: 谢谢大家,你们的回答都很有帮助。

2
我对matplotlib相当熟悉,但我认为它不可能做出像这样的东西。那么matplotlib的限制是什么?我认为它可以绘制不同大小的正方形... - joaquin
我想我正在寻找类似于 Hinton 图的东西,MatPlotLib 可以绘制,但是没有方框之间的空格。它更像一个正方形的饼图。 - Alex S
2个回答

8
你正在寻找树状图算法。一旦实施,您可以将输出(应该是矩形)转换为绘制命令,绘制任何可以绘制分层矩形的内容。 编辑: 更多链接和信息:
如果您不介意阅读论文,基于浏览器的d3库提供了“方块化”树状图(js implementation)。他们引用了Bruls, Huizing, and van Wijk的这篇论文。(这也是维基百科文章的第三个引文)
我会在链接的维基百科文章中搜索算法。例如,他们还链接到this文章,该算法描述了“混合树图”的算法。该论文还包括一些有趣的部分,在最后描述了转换为其他非矩形形状的内容。
Squarified显然是最常见的品种。上面的链接应该足以让您朝着解决方案前进,甚至直接移植d3实现。然而,理解d3的模型(类似于声明式的jQuery)的成本可能会相对较高。但是,乍一看,实现似乎相对简单。

1
不错,是的,我认为树状图正是我正在寻找的。这个列表看起来都是专有软件,你知道是否有任何开源选项吗? - Alex S

2
Squaremap 这样做。我没有使用过它(我只是从 RunSnakeRun 中知道它),它的文档严重缺失,但似乎可以工作。

谢谢,这看起来就是我要找的东西,我已经下载了它,但你说得对,文档几乎是不存在的。 - Alex S
尝试解密RunSnakeRun源码,或者联系作者。这可能是很多工作,但可能没有自己编写相同代码那么多 - 也许一旦您理解了代码,甚至可以改善情况。 - Petr Viktorin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接