在python matplotlib中绘制3d直方图/条形图

时间:2011-03-30 15:29:15

标签: python numpy scipy data-visualization

我有一个scipy / numpy的Nx3矩阵,我想用它制作一个三维条形图,其中X和Y轴由矩阵的第一列和第二列的值确定,高度每个条形图是矩阵中的第三列,条形数由N确定。

换句话说,如果“data”是矩阵,那么:

data[:, 0] # values of X-axis
data[:, 1] # values of Y-axis
data[:, 2] # values of each Z-axis bar

每个len(数据)应该有一个条

如何在Matplotlib中执行此操作?

其次,作为其中的一个变体,我怎么能做同样的事情,但是这次将条形直方图分成每个X,Y,Z维度的N个区间?即而不是每个点的条形,只需将数据直方图编入每个维度的那些箱子,并为每个箱子绘制一个条形。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:4)

3D条形图的

Here is one exampleHere is another

Numpy有一个名为histogram2d的函数来进行你想要的矩形分级。

答案 1 :(得分:1)

我从示例中正确地塑造了我的数据的“高度”有点困难,但最终还是使用了以下代码。这里,Z是一个包含所有数据的三维数组,x和rval基本上是对应于数据点的二维索引。

xs = np.arange(biopsy_num)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for y in (np.arange(r_sweep)):
    z = Z[:,y]
    ax.bar(xs, z, zs=y, zdir='y', alpha=0.8)

ax.set_xlabel('biopsies')
ax.set_ylabel('radius of biopsy')
ax.set_zlabel('Shannon Index')

plt.show()