Python 有类似 Windirstat 的图表吗?

8 投票
1 回答
3049 浏览
提问于 2025-04-17 10:18

我想用Python来制作一些图表,这些图表通过方块的大小(还有颜色)来表示数值的大小。简单来说,我想做一个像老牌程序windirstat那样的概览,windirstat是用来显示硬盘使用情况的。它的做法是先画一个大方块代表整个硬盘,然后在里面画一些小方块,代表不同的程序,方块越大,文件就越大,颜色则表示文件的类型。我对matplotlib有点了解,但我觉得用它做不到这种效果。有没有其他的Python库可以帮我实现这个?如果没有的话,有没有更底层的建议?我想如果能找到一种方法来编程绘制这些方块,我也可以手动实现(格式我不太在意,但能导出SVG和PNG格式就更好了)。

最终,我希望这个图表能像windirstat那样互动,比如当你把鼠标悬停在某个方块上时,可以看到更多信息,点击它可能会进入查看这个方块的详细内容。我只对wxpython有点了解,不知道它能否用来做这样的事情。不过现在我只想先能输出这些图表就行。

非常感谢!
Alex

编辑:
谢谢大家,你们的回答都帮了我很多。

1 个回答

8

你在寻找 树图算法。一旦实现了这些算法,你就可以把输出(应该是一些矩形)转化成绘图命令,去绘制任何可以画分层矩形的东西。

补充:

更多链接和信息:

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

我建议你去查查维基百科文章中列出的算法。例如,它们还链接到 这篇 文章,里面描述了一种“混合树图”的算法。论文最后还有一些有趣的部分,讲述了如何把形状转变为其他非矩形的形状。

方形化的树图似乎是最常见的类型。以上链接应该能给你提供足够的信息,帮助你找到解决方案,甚至直接移植 d3 的实现。不过,理解 d3 的模型(这有点像一种声明式的 jQuery)可能会有点难。乍一看,虽然实现过程看起来相对简单。

撰写回答