加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在NumPy数组中绘制3D图像

发布时间:2020-12-20 13:19:14 所属栏目:Python 来源:网络整理
导读:我在NumPy数组中有一个数据文件,我想查看3D图像.我正在分享一个例子,我可以在其中查看大小(100,100)的2D图像,这是zy 0处的xy平面中的切片. import numpy as npfrom matplotlib import pyplot as pltfrom mpl_toolkits.mplot3d import Axes3DX,Y,Z = np.mgrid
我在NumPy数组中有一个数据文件,我想查看3D图像.我正在分享一个例子,我可以在其中查看大小(100,100)的2D图像,这是zy 0处的xy平面中的切片.

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维物体中.绘制这一点总是很困难(甚至可能是不可能的).我建议使用以下解决方案之一:

>您将问题更改为:我没有在x,y,z的所有组合中进行分析,而只是在那些中,z = f(x,y)
>你改变了你的绘制精度,说你不需要100级z,但只有5级,那么你只需要制作你已有的5个图.

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

A.绘制2-dim表面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,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,alpha = 0.5,cstride 
        = 10,rstride = 10)

plt.show()

注意:我将函数更改为T = sin(X * Y * Z),因为除以X * Y * Zmakes函数行为不好,因为你将两个数字除以非常接近0.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读