三维柱状图(或绘图)

6 投票
5 回答
5347 浏览
提问于 2025-04-15 11:29

我需要以不同的方式来绘制一些数据。目前我在使用Matplotlib,对我能生成的图表还算满意。

我想问的是如何绘制最后一个图。我的数据类似于“距离表”,就像这个(只是更大,我的表是128x128,并且每个元素还有3个或更多的数字)。

现在,我的数据比距离表“结构化”得更好(我的数据不像按字母顺序排列的距离表那样“随机”变化),所以一个3D的柱状图,或者可能三个这样的柱状图,会非常合适。我理解的是,Matplotlib中缺少这样的图表。

我可以使用像这些的(有颜色的)Countor3d,或者用imshow这样的2D方式,但这并不能很好地代表我的数据(数据只在我的128个点中有意义,两个点之间没有任何东西)。而且我觉得柱子的高度比颜色更容易阅读。

所以我有几个问题:

  1. 在Matplotlib中创建3D柱状图是否可能?我想强调的是,我指的是有2D域的图,而不仅仅是为了美观而做的“假”3D渲染的2D柱状图。
  2. 如果上一个问题的答案是否定的,那么有没有其他库可以做到这一点?我更喜欢基于Python的东西,但其他适合Linux的选项也可以。
  3. 如果上一个问题的答案还是否定的,你有什么建议来展示这些数据吗?比如创建一个值的表格,叠加在imshow或其他颜色方式上?

5 个回答

5

还有一种可能性是使用Gnuplot,它可以绘制某种类型的伪3D柱状图,而gnuplot.py则可以让你通过Python来使用Gnuplot。不过,我自己还没有尝试过。

7

之前,matplotlib这个库没有支持3D图形的功能,但最近又重新加入了这个功能。你需要使用svn版本,因为自那以后没有发布新版本,而且文档也比较简单(可以看看examples/mplot3d/demo.py这个文件)。我不太确定mplot3d是否支持真正的3D柱状图,不过其中一个演示看起来有可能扩展成那样的效果。

补充一下:演示的源代码在这个链接里,但不知道为什么结果没有显示。我指的是test_polys这个函数,下面是它的样子:

示例图 http://www.iki.fi/jks/tmp/poly3d.png

test_bar2D这个函数效果会更好,但在演示中被注释掉了,因为它在当前的svn版本中会出错。可能是个小问题,也可能是比较难解决的问题。

5

MyavaVi2 可以制作 3D 条形图(往下滚动一点就能看到)。一旦你安装了 MayaViVTKETS 等工具,它们的功能就能很好地运作,但安装这些工具可能会有点麻烦。Ubuntu 系统把这些工具都打包好了,但我知道的只有这个 Linux 发行版有这样的做法。

撰写回答