绘制3D直方图/条形图

5 投票
1 回答
15351 浏览
提问于 2025-04-16 14:44

我有一个 Nx3 的矩阵,使用 scipy/numpy 来处理。我想用这个矩阵做一个三维的柱状图,其中 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(data)。

我该如何在 Matplotlib 中实现这个呢?

其次,作为这个问题的变体,我该如何做同样的事情,但这次是将柱子分成 N 个区间,分别在 X、Y 和 Z 维度上?也就是说,不是为每个点画一根柱子,而是把数据分到这些区间里,然后为每个区间画一根柱子。

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()

撰写回答