python - 从 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 与绘图的颜色分布一团糟:
感谢所有帮助,谢谢。
除了将空值转换为“坏”值并为坏值设置颜色之外,还有其他方法吗?
解决方案
推荐阅读
- python - 为什么我定义它时没有定义它?(名称错误)
- node.js - 在另一个函数中等待一个承诺
- json - 您好大师,有人可以告诉我我的 JSON 语法字符串有什么问题吗?
- python - sklearn lasso 会自动并行运行吗?
- typescript - 如何在 Typescript 中扩展/覆盖导出的类型
- html - 如果导航超过 100vh,则禁用正文滚动并启用导航滚动
- matlab - OOP 设计模式/从文件或 API 中读取信息?
- java - 如何用 Java 编写 RFC 服务?
- reactjs - 是什么导致 Safari 上出现此警告?“此网页正在消耗大量能量。关闭它可能会提高 Mac 的响应能力”
- python - 将一组实数值转换为列表