如何在matplotlib上的条形图上制作3d效果?

ple*_*ong 4 python 3d matplotlib bar-chart

我有一个非常简单的基本条形图像这个 替代文字

但我想显示带有一些3d效果的条形,就像这样 替代文字

我只是希望酒吧有这种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)
Run Code Online (Sandbox Code Playgroud)

我一直在看matplotlib的画廊,尝试了一些事情,但我不幸运,有什么想法?Thxs

dou*_*oug 11

我当然明白你需要一个3d条形图的原因; 我怀疑这就是为什么他们被创造出来的原因.

Matplotlib中创建3D图所需的库('工具包')不是第三方库等,而是包含在基础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()
Run Code Online (Sandbox Code Playgroud)

要在Maplotlib中创建三维条,您只需要做三件事(附加):

  1. 进口Axes3D从mpl_toolkits.mplot3d

  2. 调用bar3d方法(在我的scriptlet中,它由ax1调用,是Axes类的一个实例).方法签名:

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

  3. 传递给add_subplot的另一个参数,projection ='3d'

替代文字

  • 这个工具包现在是基本matplotlib安装的一部分(我相信这是从1.0开始,这是当前的稳定版本),所以要么你已经拥有它,要么只是升级Matplotlib来获得它. (2认同)

Man*_*dan 1

据我所知,Matplotlib在设计上并不支持您刚才提到的“3D”效果等功能。我记得不久前读过这个。我不知道这期间情况发生了变化

有关更多详细信息,请参阅此讨论主题。

更新

看一下 John Porter 的mplot3d模块。这不是标准 matplotlib 的一部分,而是自定义扩展。我自己从未使用过它,所以不能说太多它的用处。