相关疑难解决方法(0)

Matplotlib 渲染所有内部体素(带 alpha)

我想在 matplotlib 中渲染一个体积。体积是一个简单的 7x7x7 立方体,我希望能够看到所有内部体素(即使我知道它看起来会一团糟)。

在此处输入图片说明我已经能够渲染具有透明度的体素,但似乎永远不会绘制任何不在表面上的体素。

卷的每个 7x7 切片应如下所示: 在此处输入图片说明

我拼凑了一个 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 matplotlib

9
推荐指数
1
解决办法
4847
查看次数

python:绘制线框3D长方体

我想在 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)

python plot wireframe mayavi

5
推荐指数
2
解决办法
1万
查看次数

Python Matplotlib - 绘制长方体

我正在尝试使用 matplotlib 绘制不同大小的长方体,这样:旋转后,长方体不会以非物理方式在视觉上重叠,立方体具有不同的颜色并在它们周围绘制一个框。

我已经阅读了几篇引用类似问题的博客文章和 stackoverflow 页面,但总是略有不同;没有一个对我有用。克服重叠问题的最简单方法是使用体素(如https://matplotlib.org/api/_as_gen/mpl_toolkits.mplot3d.axes3d.Axes3D.html?highlight=voxel#mpl_toolkits.mplot3d.axes3d.Axes3D.voxels ),但这些不允许我在它们周围画框。在 matplotlib 中执行此操作的最简单方法是什么?

下图显示了我在左边的东西,以及我想要的东西在右边。

编辑:我研究了几种可以产生预期效果的方法,其中主要的方法是:

  • 使用体素,但以某种方式缩放它们,使单个体素代表单个项目。
  • 使用曲面图,然后动态调整绘图顺序以避免非物理重叠。

前者似乎更容易执行,但我仍然很难过。

左:我得到的。 正确:我想要的

python 3d matplotlib voxels

4
推荐指数
1
解决办法
5845
查看次数

绘制立方体上的曲面

我想将曲面绘制成一个立方体matplotlib.我正在尝试使用ax.plot_surface(X, Y, Z),但我有点困惑.它应该是什么X,YZ表示为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)

python matplotlib

3
推荐指数
3
解决办法
4622
查看次数

可视化由 1 和 0 组成的 3d numpy 数组

好吧,伙计们,我有这个 1 和 0 的 3d 数组,它应该代表一个 3d 对象。0 表示那里什么也没有。1 表示对象存在于该坐标中。我需要在屏幕上显示 3D 对象。对我来说,拥有一个具有取决于颜色的值的离散 3 维图将是理想的。我尝试查看 glumpy 和 vispy 但文档页面现在似乎已关闭。

python arrays 3d numpy

1
推荐指数
1
解决办法
4995
查看次数

标签 统计

python ×5

matplotlib ×3

3d ×2

arrays ×1

mayavi ×1

numpy ×1

plot ×1

voxels ×1

wireframe ×1