我正在尝试让程序读取xyz坐标值和相关RGBA值的.txt文件,然后在3D空间中输出体素。
每当我运行该程序而不尝试为每个体素分配RGBA值时,该程序就会运行良好,并在从.txt文件读取的xyz坐标处输出体素。
ax.voxels(voxel, facecolors=Color, edgecolor='k') #say Color = [1,0,0,1]
但是每当我运行下面的函数并将Color传递给上面的时候:
def assign_rgba(voxel_data, rgba_data, dims, dtype="float"):
'''voxel is a boolean array of dimension dims
True where voxels are assigned and False where voxels are unassigned
'''
dims = np.atleast_2d(dims).T
xyz = voxel_data.astype(np.int)
voxel = np.zeros(dims.flatten(),dtype=np.bool)
voxel[tuple(xyz)] = True
'''
Color is an array that includes RGBA information for each voxel
'''
Color = np.zeros(voxel.shape + (4,))
rgba = rgba_data.astype(np.float)
Color[...,0][tuple(xyz)] = rgba[0]
Color[...,1][tuple(xyz)] = rgba[1]
Color[...,2][tuple(xyz)] = rgba[2]
Color[...,3][tuple(xyz)] = rgba[3]
return Color
其中,voxel_data是.txt文件中的体素坐标的numpy数组,类似于
[[x1 x2 ...]
[y1 y2 ...]
[z1 z2 ...]] # coordinate of 1st voxel is (x1, y1, z1)...
rgba_data是.txt文件中体素的RGBA值的numpy数组,类似于
[[r1 r2 ...]
[g1 g2 ...]
[b1 b2 ...]
[a1 a2 ...]] # RGBA value of 1st voxel is (r1, g1, b1, a1)
和暗淡是某种尺寸,例如[50,50,50]
我收到一个错误:
File "/usr/lib64/python2.7/site-packages/matplotlib/colors.py", line 219, in _to_rgba_no_colorcycle
raise ValueError("Invalid RGBA argument: {!r}".format(orig_c))
ValueError: Invalid RGBA argument: 0.0
到目前为止,我已经在此演示文件(https://matplotlib.org/3.1.0/gallery/mplot3d/voxels_rgb.html)中检查了颜色类型的dtype和形状
print(rc.dtype)
>>>float64
print(rc.shape)
>>>(16,16,16)
print(colors.dtype)
>>>float64
print(colors.shape)
>>>(16,16,16,3)
以及我在程序中设置dims = [50,50,50]的文件中颜色类型的dtype和形状
print(Color[...,0].dtype)
>>>float64
print(Color[...,0].shape)
>>>(50,50,50)
print(Color.dtype)
>>>float64
print(Color.shape)
>>>(50,50,50,4)
似乎数组的一般形状和数据类型匹配-我有(50,50,50,4)而不是(50,50,50,3),因为我尝试实现RGBA不仅RGB-,但是我的程序崩溃了,而演示程序却没有崩溃。
我也尝试过
我不确定从这里做什么。
有人可以给我建议如何解决此错误/以指定的xyz,rbga值可视化多个体素吗?