绘制3D直方图/条形图
我有一个 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()