代码之家  ›  专栏  ›  技术社区  ›  Davide

python中的条形图(o plot)3D

  •  6
  • Davide  · 技术社区  · 15 年前

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

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

    现在,我的数据比距离表“结构化”得多(我的数据不会像字母排序的距离表那样“随机”变化),因此3D barchart 或者其中的3个,将会是完美的。我的理解是这样的图表在Matplotlib中丢失了。

    我可以用彩色的Countor3D these 或者类似于imshow的二维图像,但它并不能很好地代表数据是什么(数据在我的128点中有意义,两点之间没有任何意义)。而条的高度比颜色更容易辨认。

    因此,问题是:

    1. 是否可以在Matplotlib中创建三维条形图?很明显,我指的是二维域,而不仅仅是一个二维条形图,它具有“假”的三维渲染,用于美学目的。
    2. 如果前一个问题的答案是“否”,那么是否有其他库能够做到这一点?我非常喜欢基于python的东西,但是我可以接受其他Linux友好的可能性
    3. 如果前一个问题的答案是“否”,那么您对如何显示该数据有什么建议吗?例如,用值创建一个表,叠加到imshow或其他着色方式?
    5 回复  |  直到 8 年前
        1
  •  5
  •   Peter Mortensen Pieter Jan Bonestroo    14 年前

    MyavaVi2 可以使 3D barcharts (向下滚动一点)。一旦你拥有 MayaVi / VTK / ETS /等等。安装它所有的工作都很漂亮,但它可以是一些工作得到它所有的安装。Ubuntu已经打包好了,但它们是我所知道的唯一一个Linux发行版。

        2
  •  7
  •   Jouni K. Seppänen    15 年前

    一段时间以来,Matplotlib没有3D支持,但它已经被添加回去了。 recently . 您将需要使用SVN版本,因为从那以后就没有发布过任何版本,而且文档也有点稀疏(请参见examples/mplot3d/demo.py)。我不知道mplot3d是否支持真正的三维条形图,但其中一个演示看起来有点像可以扩展到类似的地方。

    编辑:演示的源代码位于 the examples 但由于某种原因,结果并非如此。我的意思是 test_polys 功能,如下所示:

    example figure http://www.iki.fi/jks/tmp/poly3d.png

    这个 test_bar2D 函数会更好,但它在演示中被注释掉,因为它会导致当前SVN版本出错。可能是一些小问题,或者是一些更难解决的问题。

        3
  •  5
  •   Jouni K. Seppänen    15 年前

    还有一种可能是gnuplot,它可以 pseudo 3D bar charts gnuplot.py 允许从python接口到gnuplot。不过,我自己也没试过。

        4
  •  1
  •   Han Zhengzu    9 年前

    这是我使用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

        5
  •  0
  •   BenMorel Sonaten    10 年前

    您可以查看图表主管:

    http://www.advsofteng.com

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

    有两个版本:免费版本在生成的图像上放置一个Blurb,并且 支付版本的定价相当合理。

    下面是一个看起来更有趣的三维堆积条形图:

    sample graph http://www.advsofteng.com/images/demo10.png