Python中的条形图(o情节)3D

python matplotlib plot 3d

4912 观看

5回复

11388 作者的声誉

我需要以各种形式绘制一些数据。目前我正在使用Matplotlib,我对我能够制作的情节非常满意。

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

现在,我的数据比距离表更好“结构化”(我的数据不会像按字母顺序排序的距离表那样“随机”变化),因此3D 条形图,或者其中3个,可能是完美的。我的理解是Matplotlib中缺少这样的图表。

我可以使用(彩色)Countor3d像这些在2D或类似imshow,但它是不是真的很好代表的是什么数据(数据有意义只是在我的128点,没有两个点之间的任何东西) 。和酒吧的高度比颜色,IMO更可读。

因此问题:

  1. 是否可以在Matplotlib中创建3D条形图?应该清楚的是,我的意思是使用2D域,而不仅仅是一个带有“虚假”3D渲染的2D条形图,用于美学目的
  2. 如果上一个问题的答案是否定的,那么还有其他一些库可以做到吗?我非常喜欢基于Python的东西,但我对其他Linux友好的可能性也很满意
  3. 如果上一个问题的答案为否,那么您对如何显示该数据有任何建议吗?例如,创建一个包含值的表格,叠加到imshow或其他彩色方式?
作者: Davide 的来源 发布者: 2009 年 5 月 9 日

回应 5


5

6751 作者的声誉

决定

MyavaVi2可以制作3D条形图(向下滚动一下)。一旦你有MayaVi / VTK / ETS /等。安装它所有工作都很漂亮,但它可以是一些工作,让它全部安装。Ubuntu已经打包了所有内容,但它们是我所知道的唯一Linux发行版。

作者: Autoplectic 发布者: 2009 年 5 月 9 日

7

28052 作者的声誉

一段时间以来,matplotlib没有3D支持,但最近又添加了。您将需要使用svn版本,因为之后没有发布,文档有点稀疏(参见examples / mplot3d / demo.py)。我不知道mplot3d是否支持真正的3D条形图,但其中一个演示看起来有点像它可以扩展到类似的东西。

编辑:演示的源代码在示例中,但由于某种原因,结果不是。我的意思是test_polys功能,这是它的样子:

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

test_bar2D功能会更好,但它在演示中被注释掉,因为它会导致当前svn版本出错。可能是一些微不足道的问题,或者更难修复的问题。

作者: Jouni K. Seppänen 发布者: 2009 年 5 月 9 日

0

174243 作者的声誉

您可以查看Chart Director:

http://www.advsofteng.com

它有各种各样的图表和图形,并有一个很好的Python(和其他几种语言)API。

有两个版本:免费版本在生成的图像上有一个模糊,付费版本的价格相当合理。

这是一个更有趣的3D堆叠条形图:

样本图
(来源:advsofteng.com

作者: Mark Harrison 发布者: 2009 年 5 月 10 日

5

28052 作者的声誉

一种可能性是Gnuplot,它可以绘制某种伪3D条形图,而gnuplot.py允许从Python接口到Gnuplot。不过,我自己没试过。

作者: Jouni K. Seppänen 发布者: 2009 年 5 月 12 日

1

1391 作者的声誉

这是我使用matplotlib的简单Bar-3d的代码。

import mpl_toolkits
from mpl_toolkits.mplot3d import Axes3D   
import matplotlib.pyplot as plt
%matplotlib inline

## The value you want to plot 
zval=[0.020752244,0.078514652,0.170302899,0.29543857,0.45358061,0.021255922,0.079022499,\
  0.171294169,0.29749654,0.457114286,0.020009631,0.073154019,0.158043498,0.273889264,0.419618287]    

fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(111,projection='3d')
col=["#ccebc5","#b3cde3","#fbb4ae"]*5
xpos=[1,2,3]*5
ypos=range(1,6,1)*5
zpos=[0]*15
dx=[0.4]*15
dy=[0.5]*15
dz=zval

for i in range(0,15,1):
     ax.bar3d(ypos[i], xpos[i], zpos[i], dx[i], dy[i], dz[i],     
color=col[i],alpha=0.75)

ax.view_init(azim=120)
plt.show()      

http://i8.tietuku.com/ea79b55837914ab2.png

作者: Han Zhengzu 发布者: 2016 年 1 月 20 日
32x32