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

如何在matplotlib中的条形图上生成三维效果?

  •  4
  • pleasedontbelong  · 技术社区  · 14 年前

    我有一个非常简单的基本酒吧的图形像这个 alt text

    但是我想用一些3d效果来显示这些条,就像这样 alt text

    我只希望这些条有3d效果…我的代码是:

    fig = Figure(figsize=(4.6,4))
    ax1 = fig.add_subplot(111,ylabel="Valeur",xlabel="Code",autoscale_on=True)
    
    width = 0.35
    ind = np.arange(len(values))
    rects = ax1.bar(ind, values, width, color='#A1B214')
    ax1.set_xticks(ind+width)
    ax1.set_xticklabels( codes )
    ax1.set_ybound(-1,values[0] * 1.1)
    canvas = FigureCanvas(fig)
    response = HttpResponse(content_type='image/png')
    canvas.print_png(response)
    

    我在matplotlib的画廊里找过,试过一些东西,但我运气不好,有什么想法吗?泰晤士河

    3 回复  |  直到 13 年前
        1
  •  1
  •   Manoj Govindan    14 年前

    据我所知Matplotlib没有 支持你刚才提到的“3D”效果。我记得很久以前读过这篇文章。我 .

    看到这个了吗 discussion thread 更多细节。

    更新

    看看约翰·波特的 mplot3d 模块。这不是标准matplotlib的一部分,而是自定义扩展。我自己从来没用过,所以没什么用处。

        2
  •  11
  •   doug    14 年前

    我当然理解你需要三维条形图的原因;我想这就是他们被创造出来的原因。

    Matplotlib中创建三维绘图所需的库(“工具箱”)包括 第三方图书馆等 包含在基本Matplotlib安装中 . (目前的稳定版本是1.0,但我不认为是0.98,所以从“附加组件”到基本安装的一部分的更改发生在过去一年内,我相信)

    给你:

    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as PLT
    import numpy as NP
    
    fig = PLT.figure()
    ax1 = fig.add_subplot(111, projection='3d')
    
    xpos = NP.random.randint(1, 10, 10)
    ypos = NP.random.randint(1, 10, 10)
    num_elements = 10
    zpos = NP.zeros(num_elements)
    dx = NP.ones(10)
    dy = NP.ones(10)
    dz = NP.random.randint(1, 5, 10)
    
    ax1.bar3d(xpos, ypos, zpos, dx, dy, dz, color='#8E4585')
    PLT.show()
    

    要在Maplotlib中创建三维条形图,只需执行三项(附加)操作:

    1. 进口 轴3D

    2. 打电话给 条形图3D 方法(在我的scriptlet中,它由

      bar3d(x,y,z,dy,dz,color='b',zsort=“average”,*args,**kwargs)

    alt text