Python:如何绘制类似于Matlab的"pcshow"的3D网格?



我正在尝试绘制存储在 3D 矩阵中的立方体 3D 场景网格data其中包含索引(例如 [0..10](,这些索引指示体素以哪种颜色绘制,其中 0 是"空"标签。在 Matlab 中,我使用以下代码:

[X,Y,Z] = meshgrid(1:size(data,1),1:size(data,2),1:size(data,3));
xyz=[X(:) Y(:) Z(:)];
idx = data~=0;   % Ignore labels 0 -> they specify empty voxels
pcshow(xyz(idx,:),data(idx),'MarkerSize',1000)

python中有类似的函数吗?

这个堆栈溢出答案很接近,但它缺乏传递data矩阵的可能性。一个技巧是遍历所有标签,但我正在寻找一个更优雅的解决方案。

以下是一些python解决方案:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X, Y, Z = np.meshgrid(np.arange(data.shape[0]), np.arange(data.shape[1]), np.arange(data.shape[2]))
[x, y, z] = (np.reshape(X, (-1)), np.reshape(Y, (-1)), np.reshape(Z, (-1)))
idx = (data != 0) 
idx = np.reshape(idx, (-1))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
scat = ax.scatter(x[idx], y[idx], z[idx], c=np.reshape(data,(-1))[idx], cmap='jet', marker="s")
# Some additional formatting
ax.set_xlabel('X', fontsize=9)
ax.set_ylabel('Y', fontsize=9)
ax.set_zlabel('Z', fontsize=9)
# Setting camera angle
az = 150
el = 30
ax.view_init(elev=el, azim=az)
fig.colorbar(scat, shrink=0.5, aspect=5)

最新更新