我正在寻找一个3维数组。有没有一种方法可以直接馈入数组,在3d数组中的位置产生的坐标上绘制体素并具有实际值(颜色)? 到目前为止,我发现的所有方法(例如ax.voxels,mlab.points3d ...)均采用一个数组分别用于x,y和z坐标,但我不想明确声明坐标,就像没有坐标一样在plt.imshow中做。
编辑: 我想绘制一个数组例如像这样: a = [[[10,20],[5,300]],[[7,80],[9,12]]] 这应该给出一个多维数据集,该多维数据集在数组索引处给出的坐标处具有数组内部的值。我想知道是否有一种方法可以直接采用这样的数组并将其绘制。
答案 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()