Python直接体积图3D阵列

时间:2019-01-08 15:07:26

标签: python matplotlib multidimensional-array plot mayavi

我正在寻找一个3维数组。有没有一种方法可以直接馈入数组,在3d数组中的位置产生的坐标上绘制体素并具有实际值(颜色)? 到目前为止,我发现的所有方法(例如ax.voxels,mlab.points3d ...)均采用一个数组分别用于x,y和z坐标,但我不想明确声明坐标,就像没有坐标一样在plt.imshow中做。

编辑: 我想绘制一个数组例如像这样: a = [[[10,20],[5,300]],[[7,80],[9,12]]] 这应该给出一个多维数据集,该多维数据集在数组索引处给出的坐标处具有数组内部的值。我想知道是否有一种方法可以直接采用这样的数组并将其绘制。

1 个答案:

答案 0 :(得分:2)

问题似乎是如何将(n,m,l)形状的数组绘制为体素,其中体素的颜色由数组的值给出。这需要一个颜色图和一个规范化将值转换为颜色(因为voxels不会直接将颜色图作为输入)。

其余的很简单:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

a = np.array( [ [ [10,20], [5,300] ] , [ [7,80],[9,12] ] ] )

fig = plt.figure()
ax = fig.gca(projection='3d')

cmap = plt.get_cmap("viridis")
norm= plt.Normalize(a.min(), a.max())
ax.voxels(np.ones_like(a), facecolors=cmap(norm(a)), edgecolor="black")

plt.show()

enter image description here