python mayavi三维绘图

网上下载mayavi的官方帮助文档,里面有很多例子,下面的记录都是查看手册后得到的。

http://code.enthought.com/projects/mayavi/docs/development/latex/mayavi/mayavi_user_guide.pdf
链接:https://pan.baidu.com/s/1MuQFd9EtgW0puAT4b2SGYw
提取码:0wkd

python的mayavi.mlab库中的绘图函数有很多候选参数,但下文记录并没有过多讨论,本人也是需要用到才查看手册的。
安装好mayavi2的绘图环境后,可以结合numpy进行科学绘图,在代码中事先加入如下代码:

import mayavi.mlab as mlab
from numpy import exp,sin,cos,tan,random,mgrid,ogrid,linspace,sqrt,pi
import numpy as np
import matplotlib.pyplot as plt
mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1)) #更改背景色
#添加matlab的peaks函数
def peaks(x,y):
    return 3.0*(1.0-x)**2*exp(-(x**2) - (y+1.0)**2) - 10*(x/5.0 - x**3 - y**5) * exp(-x**2-y**2) - 1.0/3.0*exp(-(x+1.0)**2 - y**2)

 	

首先从帮助手册上了解下mayavi的colormap,如下图:
这里写图片描述
下面列举常用的三维绘图函数和简单例子。

一、barchart

* barchart(s, ...)
* barchart(x, y, s, ...)
* barchart(x, y, f, ...)
* barchart(x, y, z, s, ...)
* barchart(x, y, z, f, ...)

如果只传递一个参数,可以是一维(1-D),二维(2-D)或3维(3-D)的给定向量长度的数组;
如果传递三个参数(x,y,s)或(x,y,f),x,y是对应于数组s的二维(2-D)坐标,也可以是可调用的函数f,该函数返回数组;
四个参数的时候(x,y,z)表示三维坐标

s = np.random.rand(3,3)
mlab.barchart(s)
mlab.vectorbar()
mlab.show()

图片2

x,y = np.mgrid[-5:5:20j,-5:5:20j]
s = peaks(x,y)		#peaks函数前面已经定义
mlab.barchart(x,y,s)
mlab.vectorbar()
mlab.show()

图片3

二、contour3d

* contour3d(scalars, ...)
* contour3d(x, y, z, scalars, ...)
* contour3d(x, y, z, f, ...)
scalars是三维数组(3-D),x,y,z用numpy.mgrid生成,是三维数组

x, y, z = ogrid[-5:5:64j, -5:5:64j, -5:5:64j]
scalars = x * x * 0.5 + y * y + z * z * 2.0
mlab.contour3d(scalars, contours=6, transparent=True)
mlab.colorbar()
mlab.show()

fig4

三、contour_surf

* contour_surf(s, ...)
* contour_surf(x, y, s, ...)
* contour_surf(x, y, f, ...)

s是二维数组,f是可调用的函数,例如peaks函数
x and y can be 1D or 2D arrays (such as returned by numpy.ogrid or numpy.mgrid)

x,y = np.mgrid[-5:5:70j,-5:5:70j]
#绘制peaks函数的等高线
mlab.contour_surf(x,y,peaks,contours=9)
mlab.colorbar()
mlab.show()

fig5

四、imshow

* imshow(s, ...)

s is a 2 dimension array. The values of s are mapped to a color using the colormap.

s = np.random.rand(3,3) #生成随机的3×3数组
mlab.imshow(s)
mlab.colorbar()
mlab.show()

fig6

五、mesh

* mesh(x, y, z, ...)

x, y, z are 2D arrays, all of the same shape, giving the positions of the vertices of the surface.
x , y , z 都是二维数组,拥有相同的shape,而且z代表了平面坐标(x,y)对应下的值,下面绘制的是matlab的peaks函数三维图,可能是因为绘图比例的原因看起来并没有matlab下绘制的好看

y,x = np.mgrid[-5:5:70j,-5:5:70j]
z=peaks(x,y)
mlab.mesh(x,y,z)
mlab.colorbar()
mlab.show()

这里写图片描述

六、surf

* surf(s, ...)
* surf(x, y, s, ...)
* surf(x, y, f, ...)
x , y可以是1-D或者2-D的数组(比如numpy.ogrid或numpy.mgrid返回的数组)
如果只传递了参数数组s,那么x,y就被认为是数组s的索引值,并且创建等宽的数据集。(If only 1 array s is passed, the x and y arrays are assumed to be made from the indices of arrays, and an uniformly-spaced data set is created.)
surf和mesh的不同之处在于surf的参数x,y可以是一维(1-D)的。

mlab.clf()
x, y = mgrid[-10:10:100j, -10:10:100j]
r = sqrt(x**2 + y**2)
z = sin(r)/r
# mlab.surf(x,y,z,wrap_scale='auto')
mlab.surf(z, warp_scale='auto')
mlab.colorbar()
mlab.show()

fig8

surf函数同样可以绘制peaks曲面,

pk_y,pk_x = np.mgrid[-5:5:70j,-5:5:70j]
pk_z=peaks(pk_x,pk_y)
mlab.surf(pk_z,warp_scale='auto',colormap='jet')
mlab.colorbar()
mlab.show()

这里只传递了一个参数pk_z,
fig9

七、plot3d

* plot3d(x, y, z, ...)
* plot3d(x, y, z, s, ...)

数据点之间绘制线段,x,y,z,s都是具有相同shape的numpy数组或列表(list),x,y,z是三维坐标,也就是空间中数据点的位置

t=mgrid[-pi:pi:100j]
mlab.plot3d(cos(t),sin(3*t),cos(5*t),color=(0.23,0.6,1),colormap='Spectral')
mlab.colorbar()
mlab.show()

fig10

八、points3d

* points3d(x, y, z...)
* points3d(x, y, z, s, ...)
* points3d(x, y, z, f, ...)

和前面的plot3d差不多,只不过points3d只绘制三维坐标下的点(x,y,z),仍然用前面的例子。

t=mgrid[-pi:pi:50j]
s=sin(t)
# 参数s是设置每个点的大小(scalar),mode可选
mlab.points3d(cos(t),sin(3*t),cos(5*t),s,mode='sphere',line_width=1)
mlab.colorbar()
mlab.show()

fi11

参数的mode可选项如下图:
fi12

九、quiver3d

* quiver3d(u, v, w, ...)
* quiver3d(x, y, z, u, v, w, ...)
* quiver3d(x, y, z, f, ...)

x,y,z=mgrid[-0:3:0.6,-0:3:0.6,0:3:0.3]
r=sqrt(x**2+y**2+z**4)
u=y*sin(r)/(r+0.001)
v=-x*sin(r)/(r+0.001)
w=zeros_like(r)
mlab.quiver3d(x,y,z,u,v,w)
mlab.colorbar()
mlab.show()

fi13

十、animate

绘制三维动图,帮助文档上的代码执行后并没有动画效果,下面2个示例代码是查看了mayavi的相关源码后总结的,大家也可以直接查看相关源码查看更多官方提供的示例代码。

(1)

@mlab.animate(delay=200) # 设置延时时间200ms
def anim():
	n_mer, n_long = 6, 11
	dphi = pi/1000.0
	phi = np.arange(0.0, 2 * pi + 0.5 * dphi, dphi, 'd')
	mu = phi * n_mer
	x = cos(mu) * (1+cos(n_long * mu/n_mer) * 0.5)
	y = sin(mu) * (1+cos(n_long * mu/n_mer) * 0.5)
	z = sin(n_long * mu/n_mer) * 0.5
	l = mlab.plot3d(x, y, z, sin(mu), tube_radius=0.025, colormap='Spectral')
	ms = l.mlab_source
	for i in range(100):
		x = cos(mu) * (1+cos(n_long * mu/n_mer + pi * (i+1)/5.) * 0.5)
		scalars = sin(mu + pi * (i+1)/5)
		#不改变shape和size的情况下用set来更改属性值
		ms.set(x=x, scalars=scalars) 	
		yield
anim()
mlab.show()

(2)

@mlab.animate #默认500ms延时
def anim2():
	x, y = np.mgrid[0:3:1,0:3:1]
	s = mlab.surf(x, y, np.asarray(x*0.1, 'd'),representation='wireframe')
	fig = mlab.gcf()
	ms = s.mlab_source
	for i in range(15):
		x, y = np.mgrid[0:3:1.0/(i+2),0:3:1.0/(i+2)]
		sc = np.asarray(x*x*0.05*(i+1), 'd')
		ms.reset(x=x, y=y, scalars=sc)
		fig.scene.reset_zoom()
		yield
anim2()
mlab.show()
  • 24
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Python 中,可以使用 matplotlib 库来进行三维绘图。 首先,需要在代码中导入 matplotlib 库: ```python import matplotlib.pyplot as plt ``` 然后,使用 `figure` 函数创建一个新的图形,并使用 `add_subplot` 函数添加一个三维子图: ```python fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ``` 接下来,可以使用 `plot_surface` 函数绘制三维曲面图,或者使用 `scatter` 函数绘制三维散点图。 例如,下面的代码绘制了一个三维曲面图: ```python import numpy as np # 生成数据 X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) # 绘图 ax.plot_surface(X, Y, Z, cmap='coolwarm') ``` 绘制完成后,可以使用 `show` 函数显示图形: ```python plt.show() ``` 如果需要绘制三维散点图,可以使用 `scatter` 函数,例如: ```python ax.scatter(X, Y, Z, c='r', marker='o') ``` 希望这些信息能帮到你! ### 回答2: Python三维绘图是指使用Python语言来实现三维图形的绘制和呈现。在Python中,有多个常用的绘图库可以用于三维绘图,如Matplotlib、Mayavi和Plotly等。 首先,Matplotlib是Python最常用的绘图库之一,它提供了丰富的功能用于绘制二维和三维图形。对于三维绘图,Matplotlib中的mplot3d子库可以实现三维数据的可视化。通过导入mplot3d子库,我们可以使用相应的函数和类来创建、操作和显示三维图形。例如,可以使用`plot_surface`函数绘制三维曲面图,使用`plot_wireframe`函数绘制三维线框图,使用`scatter`函数绘制三维散点图等等。 其次,Mayavi是一个专门用于科学数据可视化的Python库。Mayavi提供了更高级的三维绘图和可视化功能,能够处理大量数据,并提供交互性和动态性。Mayavi可以通过编程或使用MayaVi应用程序来创建和操作三维图形。对于三维绘图Mayavi提供了类似于Matplotlib的函数和类,可以创建各种类型的三维图形,如曲面、等值面、体积渲染等等。 最后,Plotly是一个基于Python语言的可视化工具,在数据科学和数据可视化中得到广泛应用。Plotly提供了丰富的三维绘图功能和交互性,可以创建漂亮的三维图形,并支持在线共享和展示。通过Plotly,我们可以使用包括`scatter3d`、`surface`和`mesh3d`等函数来绘制各种类型的三维图形,并利用Plotly的交互功能进行数据探索和展示。 总之,Python三维绘图可以通过使用Matplotlib、Mayavi和Plotly等库来实现。通过这些库,我们可以方便地创建、操作和展示各种类型的三维图形,满足数据可视化的需求。 ### 回答3: Python可以使用许多不同的库来进行三维绘图,其中最流行的库是Matplotlib。Matplotlib是一个功能强大的图形库,可以绘制各种类型的图表,包括二维和三维图表。 要创建三维图表,我们需要使用Matplotlib的一个子库,即mplot3d。首先,我们需要导入这个子库: ```python from mpl_toolkits import mplot3d import matplotlib.pyplot as plt ``` 接下来,我们创建一个三维坐标系: ```python fig = plt.figure() ax = plt.axes(projection='3d') ``` 通过`projection='3d'`参数,我们告诉Matplotlib我们要创建一个三维图表。 然后,我们可以使用各种可用的函数来绘制不同类型的三维图表,例如散点图、线图和曲面图。以下示例演示如何创建一个简单的散点图: ```python x = [1, 2, 3, 4, 5] y = [6, 7, 8, 9, 10] z = [11, 12, 13, 14, 15] ax.scatter3D(x, y, z, cmap='Greens') plt.show() ``` 在这个例子中,我们使用`scatter3D`函数在三维坐标系上绘制一组散点,并通过`cmap`参数来设置颜色。最后,我们使用`show`函数将图表显示出来。 除了散点图,我们还可以使用其他函数来创建不同类型的图表,例如`plot3D`函数用于绘制线图,`plot_surface`函数用于绘制曲面图等。 总之,Python的Matplotlib库提供了许多函数和工具来进行三维绘图。我们可以使用这些函数来创建各种类型的三维图表,以展示数据的分布、趋势和关联关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值