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() 如何查看形状(100,100,100)的数据T的3D图像? 解决方法
我认为主要的问题是,每个点确实有4个信息,所以你实际上是在一个4维物体中.绘制这一点总是很困难(甚至可能是不可能的).我建议使用以下解决方案之一:
>您将问题更改为:我没有在x,y,z的所有组合中进行分析,而只是在那些中,z = f(x,y) 如果你想使用第一种方法,那么有几种子方法: A.绘制2-dim表面f(x,y)= z并用T对其进行着色 方法1.A给出的图(我认为是最好的解决方案),z = x ^ 2 y ^ 2得出: 我用过这个程序: 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() 第二种方法给出了类似的东西: 随着代码: 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |