Python 在体素上添加颜色栏

Python 在体素上添加颜色栏,python,matplotlib,Python,Matplotlib,我需要在体素上添加colorbar,其中FaceColor基于数组(在我的例子中,FaceColor基于“数据”数组)。这是我的剧本: x,y,z = np.mgrid[1:10,3:18,0:5] data = np.random.normal(0,10,[x.shape[0]-1,x.shape[1]-1,x.shape[2]-1]) visiblebox = np.random.choice([True,False],data.shape) ax = plt.figure().add_su

我需要在体素上添加colorbar,其中FaceColor基于数组(在我的例子中,FaceColor基于“数据”数组)。这是我的剧本:

x,y,z = np.mgrid[1:10,3:18,0:5]
data = np.random.normal(0,10,[x.shape[0]-1,x.shape[1]-1,x.shape[2]-1])
visiblebox = np.random.choice([True,False],data.shape)
ax = plt.figure().add_subplot(111,projection ='3d')
colors = plt.cm.plasma(data)
ax.voxels(x,y,z,visiblebox,facecolors=colors,alpha = 0.5,edgecolor='k')
plt.colorbar(colors)
plt.show()
我试过这个:

fig = plt.figure()
ax = fig.add_subplot(111,projection ='3d')
p = ax.voxels(x,y,z,visiblebox,facecolors=colors,alpha = 0.5,edgecolor='k')
fig.colorbar(p)
但我有一个错误。我不知道如何使colorbar正常工作。

当我查找SO时,我找到了这个答案。我不确定颜色栏,但我在查看答案时修复了它,颜色栏出现了

import matplotlib.pyplot as plt
from matplotlib import cm
import matplotlib.colors

x,y,z = np.mgrid[1:10,3:18,0:5]
data = np.random.normal(0,10,[x.shape[0]-1,x.shape[1]-1,x.shape[2]-1])
visiblebox = np.random.choice([True,False],data.shape)

ax = plt.figure().add_subplot(111,projection ='3d')
colors = plt.cm.plasma(data)
norm = matplotlib.colors.Normalize(vmin=0, vmax=16)

vox = ax.voxels(x,y,z,visiblebox,facecolors=colors,alpha = 0.5,edgecolor='k')

m = cm.ScalarMappable(cmap=plt.cm.plasma, norm=norm)
m.set_array([])
plt.colorbar(m)

plt.show()
当我抬头看时,我找到了这个答案。我不确定颜色栏,但我在查看答案时修复了它,颜色栏出现了

import matplotlib.pyplot as plt
from matplotlib import cm
import matplotlib.colors

x,y,z = np.mgrid[1:10,3:18,0:5]
data = np.random.normal(0,10,[x.shape[0]-1,x.shape[1]-1,x.shape[2]-1])
visiblebox = np.random.choice([True,False],data.shape)

ax = plt.figure().add_subplot(111,projection ='3d')
colors = plt.cm.plasma(data)
norm = matplotlib.colors.Normalize(vmin=0, vmax=16)

vox = ax.voxels(x,y,z,visiblebox,facecolors=colors,alpha = 0.5,edgecolor='k')

m = cm.ScalarMappable(cmap=plt.cm.plasma, norm=norm)
m.set_array([])
plt.colorbar(m)

plt.show()