首页 > 解决方案 > 从 3D 可视化中的颜色图中更改特定值的颜色 (mpl_toolkits.mplot3d: Axes3D)

问题描述


我提取了我测量的表面的数据,并希望以 2D 和 3D 形式将它们可视化。2D 没问题,但 3D 的颜色有问题。数据来自方形屏幕,但测量的是圆形表面,因此圆形区域外有许多空测量点。我不想在我的情节中有任何一种颜色。我尝试了两种方式:

1. 将空测量点设置为零,屏蔽所有零和 cmap.set_bad('black', alpha= 1)
(数据已经从 .txt 文件中提取并缩减到我可以使用的窗口,称为 data3D , 256x256 像素值存储为字符串)

%pylab inline
from mpl_toolkits.mplot3d import Axes3D

for i in range(len(data3D)):                                # 256 lists stored in a list
    data3D[i]=[0 if x =='' else int(x) for x in data3D[i]]  # set empty strings to 0, 
                                                            # string values converting to integer
                                                            # values
cmap = plt.get_cmap('jet')
cmap.set_bad('black', alpha= 1)    # making the new color invisible

X, Y = meshgrid(np.arange(256), np.arange(256))
Z = np.asmatrix(data3D)
Z= np.ma.masked_equal(Z, 0)

fig = plt.figure(figsize=(18,14))
ax = plt.axes(projection='3d')
p = ax.plot_surface(X, Y, Z, cmap=cmap, rstride=10, cstride=10, linewidth=0)
fig.colorbar(p, ax=ax)
ax.view_init(45, 45)
    
plt.title('First try')

plt.show()

但我得到的零仍然是原来的颜色:

第一次尝试

2. 将空测量点设置为 np.nan(在 2D 可视化中被识别为错误值)并再次 cmap.set_bad('black', alpha= 1)

%pylab inline
from mpl_toolkits.mplot3d import Axes3D

for i in range(len(data3D)):                                     # 256 lists stored in a list
    data3D[i]=[np.nan if x =='' else int(x) for x in data3D[i]]  # set empty strings to np.nan, 
                                                                 # string values converting to 
                                                                 # integer values
                 
cmap = plt.get_cmap('jet')
cmap.set_bad('black', alpha= 1)    # making the new color invisible

X, Y = meshgrid(np.arange(256), np.arange(256))
Z = np.asmatrix(data3D)


fig = plt.figure(figsize=(18,14))
ax = plt.axes(projection='3d')
p = ax.plot_surface(X, Y, Z, cmap=cmap, rstride=10, cstride=10, linewidth=0)
fig.colorbar(p, ax=ax)
ax.view_init(45, 45)
    
plt.title('Second try')

plt.show()

这里的 emtpy 值是不可见的,但 np.nan 与绘图的颜色分布一团糟:

第二次尝试

感谢所有帮助,谢谢。

除了将空值转换为“坏”值并为坏值设置颜色之外,还有其他方法吗?

标签: pythoncolors3dcolormap

解决方案


推荐阅读