我想在 matplotlib 中渲染一个体积。体积是一个简单的 7x7x7 立方体,我希望能够看到所有内部体素(即使我知道它看起来会一团糟)。
我已经能够渲染具有透明度的体素,但似乎永远不会绘制任何不在表面上的体素。
我拼凑了一个 MWE
以下代码创建了一个 5x5x5 的体积,其中包含红色、绿色、蓝色、黄色和青色 5x5 层。每层的 alpha 设置为 0.5,所以整个东西应该是透明的。
然后我将所有非表面体素的颜色更改为带有 alpha 1 的黑色,因此如果它们正在显示,我们应该能够在中心看到一个黑框。
自己渲染它会产生左边的图,但是如果我们从青色层中移除填充,我们可以看到黑框确实存在,只是没有显示出来,因为即使那些遮挡体素,它也被 100% 遮挡了alpha 小于 1。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # NOQA
spatial_axes = [5, 5, 5]
filled = np.ones(spatial_axes, dtype=np.bool)
colors = np.empty(spatial_axes + [4], dtype=np.float32)
alpha = .5
colors[0] = [1, 0, 0, alpha]
colors[1] = [0, 1, 0, alpha]
colors[2] = [0, 0, 1, alpha]
colors[3] = [1, 1, 0, alpha] …Run Code Online (Sandbox Code Playgroud) 我想在 python 中绘制 3d 长方体。
输入:center(中心点有3个点)radius(3个半径值,每个维度一个)
理想情况下,它应该是一个线框图(我需要看看里面有什么)。我不太确定如何去做。使用 python matplotlib 或 Mayavi 就可以了。
谢谢!
到目前为止,我已经尝试了以下代码..但这只绘制了一个立方体
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect("equal")
#draw cube
r = [-1, 1]
for s, e in combinations(np.array(list(product(r,r,r))), 2):
if np.sum(np.abs(s-e)) == r[1]-r[0]:
ax.plot3D(*zip(s,e), color="b")
plt.show()
Run Code Online (Sandbox Code Playgroud)
这段代码中缺少的是它只是一个立方体(不是长方体)并且它仅以 0 为中心(我实际上想提供中心)
经过一番思考,我想出了这个。这似乎是正确的。如果您认为它不正确,请告诉我...这是无需安装 myavi、pygame、povray 的最简单方法(我很难在 ipython、conda、我的 Windows 笔记本电脑上安装这些)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 matplotlib 绘制不同大小的长方体,这样:旋转后,长方体不会以非物理方式在视觉上重叠,立方体具有不同的颜色并在它们周围绘制一个框。
我已经阅读了几篇引用类似问题的博客文章和 stackoverflow 页面,但总是略有不同;没有一个对我有用。克服重叠问题的最简单方法是使用体素(如https://matplotlib.org/api/_as_gen/mpl_toolkits.mplot3d.axes3d.Axes3D.html?highlight=voxel#mpl_toolkits.mplot3d.axes3d.Axes3D.voxels ),但这些不允许我在它们周围画框。在 matplotlib 中执行此操作的最简单方法是什么?
下图显示了我在左边的东西,以及我想要的东西在右边。
编辑:我研究了几种可以产生预期效果的方法,其中主要的方法是:
前者似乎更容易执行,但我仍然很难过。
我想将曲面绘制成一个立方体matplotlib.我正在尝试使用ax.plot_surface(X, Y, Z),但我有点困惑.它应该是什么X,Y并Z表示为2D数组?
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
points = np.array([[-1, -1, -1],
[1, -1, -1 ],
[1, 1, -1],
[-1, 1, -1],
[-1, -1, 1],
[1, -1, 1 ],
[1, 1, 1],
[-1, 1, 1]])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# ax.plot_surface(X, Y, Z) # how?
ax.scatter3D(points[:, 0], points[:, 1], points[:, 2])
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
Run Code Online (Sandbox Code Playgroud) 好吧,伙计们,我有这个 1 和 0 的 3d 数组,它应该代表一个 3d 对象。0 表示那里什么也没有。1 表示对象存在于该坐标中。我需要在屏幕上显示 3D 对象。对我来说,拥有一个具有取决于颜色的值的离散 3 维图将是理想的。我尝试查看 glumpy 和 vispy 但文档页面现在似乎已关闭。