【问题标题】:Python direct volumetric plot 3D arrayPython直接体积图3D数组
【发布时间】:2019-06-03 07:28:18
【问题描述】:

我希望绘制一个 3 维数组。有没有一种方法可以直接输入数组,绘制体素并在从 3d 数组中的位置产生的坐标处使用实际值(颜色)? 到目前为止我发现的所有方法(例如 ax.voxels、mlab.points3d ...)都为 x、y 和 z 坐标分别使用一个数组,但我不想明确说明坐标,就像没有在 plt.imshow 中做。

编辑: 我想绘制一个数组,例如像这样: a = [ [ [10,20], [5,300] ] , [ [7,80],[9,12] ] ] 这应该给出一个立方体,该立方体在数组索引给出的坐标处具有数组内的值。我想知道是否有一种方法可以直接将这样的数组绘制出来。

【问题讨论】:

  • 你的问题听起来有点含糊。您至少应该提供一些您想要的样本图或一些测试数据。您可以使用 scatter3d 和 z 值作为颜色参数
  • 您想绘制一个由小体素组成的大立方体?所以不位于立方体边缘的体素不会被看到?你看到this example了吗?
  • @Bazingaa 我编辑了我的问题,有帮助吗?

标签: python matplotlib multidimensional-array plot mayavi


【解决方案1】:

问题似乎是如何将 (n,m,l) 形数组绘制为体素,其中体素的颜色由数组的值给出。这需要颜色图和规范化来将值转换为颜色(因为voxels 不直接将颜色图作为输入)。

剩下的就直截了当:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

a = np.array( [ [ [10,20], [5,300] ] , [ [7,80],[9,12] ] ] )

fig = plt.figure()
ax = fig.gca(projection='3d')

cmap = plt.get_cmap("viridis")
norm= plt.Normalize(a.min(), a.max())
ax.voxels(np.ones_like(a), facecolors=cmap(norm(a)), edgecolor="black")

plt.show()

【讨论】:

  • 非常感谢!我现在意识到我以错误的方式思考这个问题。您是否知道如何设置体素的不透明度?我正在尝试使用 alpha,但它不会改变任何东西(即使它确实将它作为参数)。
  • 如果你看this example,alpha 编码在 facecolors 中;这些是 RGBA 而不是正在使用的 RGB 颜色。
猜你喜欢
  • 1970-01-01
  • 2018-11-11
  • 2023-02-09
  • 1970-01-01
  • 2013-06-12
  • 2014-04-18
  • 1970-01-01
  • 2018-02-28
  • 2019-05-24
相关资源
最近更新 更多