gpt4 book ai didi

python - 绘制 3D 图像形成 NumPy 数组中的数据

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:49 25 4
gpt4 key购买 nike

我在 NumPy 数组中有一个数据文件,我想查看 3D 图像。我正在分享一个示例,我可以在其中查看大小为 (100, 100) 的二维图像,这是 xy 平面中 z = 0 的切片。

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X, Y, Z = np.mgrid[-10:10:100j, -10:10:100j, -10:10:100j]
T = np.sin(X*Y*Z)/(X*Y*Z)
T=T[:,:,0]
im = plt.imshow(T, cmap='hot')
plt.colorbar(im, orientation='vertical')
plt.show()

Slice at z = 0

如何查看形状为 (100, 100, 100) 的数据 T 的 3D 图像?

最佳答案

我认为主要问题是,每个点都有 4 个信息,因此您实际上对 4 维对象感兴趣。绘制它总是很困难(甚至可能是不可能的)。我建议采用以下解决方案之一:

  1. 您将问题更改为:我对 x,y,z 的所有组合不感兴趣,但只对那些组合感兴趣,其中 z = f(x,y)

  2. 您稍微更改绘图的准确性,说您不需要 100 个 z 级别,但可能只需要 5 个,然后您只需制作 5 个已有的绘图。

如果你想使用第一种方法,那么有几个子方法:

一个。绘制 2 维曲面 f(x,y)=z 并用 T 对其着色B. 使用任何用于绘制复杂函数的技术,有关更多信息,请参阅 here .

方法 1.A(我认为这是最好的解决方案)用 z=x^2+y^2 给出的图产生: enter image description here

我用过这个程序:

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
X, Y = np.mgrid[-10:10:100j, -10:10:100j]
Z = (X**2+Y**2)/10 #definition of f
T = np.sin(X*Y*Z)
norm = mpl.colors.Normalize(vmin=np.amin(T), vmax=np.amax(T))
T = mpl.cm.hot(T) #change T to colors
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, facecolors=T, linewidth=0,
cstride = 1, rstride = 1)
plt.show()

第二种方法给出如下内容:

enter image description here

代码:

norm = mpl.colors.Normalize(vmin=-1, vmax=1)
X, Y= np.mgrid[-10:10:101j, -10:10:101j]
fig = plt.figure()
ax = fig.gca(projection='3d')
for i in np.linspace(-1,1,5):
Z = np.zeros(X.shape)+i
T = np.sin(X*Y*Z)
T = mpl.cm.hot(T)
ax.plot_surface(X, Y, Z, facecolors=T, linewidth=0, alpha = 0.5, cstride
= 10, rstride = 10)

plt.show()

注意:我将函数更改为 T = sin(X*Y*Z) 因为除以 X*Y*Z 会使函数行为变坏,因为您将非常接近于 0 的两个数相除。

关于python - 绘制 3D 图像形成 NumPy 数组中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com