python - 如何使用 Matplotlib 创建基于 RGBA 数据的彩色 3D 体积图?
问题描述
我想在 Matplotlib(或任何合适的替代方案)中创建一个基于 RGBA 颜色的 3D 图,类似于这个(源):
基本思想是:
- 拥有一个数据集,其中包含 R、G 和 B 通道的相关 alpha 值。也就是说,当 R=0 时,红色通道是透明的,当 R=1 时,红色通道是完全不透明的。
- 叠加生成的 RGB 通道以获得图像 - 就像投影仪制作的真实图像一样,但是是 3D 的。在 2D 中我可以用 解决它
pyplot.imshow
,但我怎样才能在 3D 中做一些等效的事情呢?
例如,这里有一些类似于我的任意数据:
x = y = z = np.linspace(-3, 3, 200)
xx, yy, zz = np.meshgrid(x, y, z, indexing='ij')
gauss = np.exp(-(xx**2+yy**2+zz**2)/2)
red = np.sin((xx+yy) * np.pi)**2 * gauss
green = np.cos((yy+zz) * np.pi)**2 * gauss
blue = np.sin((xx+zz+0.25) * np.pi)**2 * gauss
如果这是 2D 的,我会沿着这条线做一些事情,但理想情况下颜色会混合并且不会相互重叠。(我不确定如何在没有 PIL 的情况下在 2D 中做到这一点,但这对于这个问题的核心并不重要。)
# Create R, G and B channels and add the data as alpha value
red2, green2, blue2 = red[100], green[100], blue[100]
R = np.broadcast_to([1.0, 0, 0], (*red2.shape, 3))
G = np.broadcast_to([0, 1.0, 0], (*green2.shape, 3))
B = np.broadcast_to([0, 0, 1.0], (*blue2.shape, 3))
r = np.insert(R, 3, red2, axis=-1)
g = np.insert(G, 3, green2, axis=-1)
b = np.insert(B, 3, blue2, axis=-1)
# plot everything:
plt.imshow(r, aspect='auto', origin='lower', extent=(-3,3,-3,3))
plt.imshow(g, aspect='auto', origin='lower', extent=(-3,3,-3,3))
plt.imshow(b, aspect='auto', origin='lower', extent=(-3,3,-3,3))
plt.gca().set_facecolor('black')
plt.show()
但是我怎么能在 3D 中做类似的事情呢?
解决方案
推荐阅读
- css - CSS背景图像不加载
- python - 自动角色事件中未定义名称“角色”
- spring-boot - redisTemplate ValueOperations 增量获取 null
- sql - #
我正在我的 rails 应用程序中构建三个模型。一个模型引用了两次相同的模型,如我的DB Schema<
- for-loop - Lua:在 for 循环中使用计算值的典型方法是什么?
- c - C中文件删除中的可变长度行
- avro - 使用kafka-avro-console-consumer消费spring cloud stream kafka发送的avro消息时出错
- python - 如何仅给定python中的目录名称就获取目录的完整路径
- python - Python np.array 将 x 值放入 x 个 bin,其中每个值由 1 个 bin 表示
- php - Symfony 翻译网站并查看语言列表