用matplotlib绘制3D函数图像

①用pyplot的figure()函数可以创建一个figure对象

②以它为参数创建Axes3D对象,使之具有3D坐标轴

③pyplot的show()方法可以显示所有figure对象

*显示两个3D坐标轴

[python]  view plain  copy
  1. import matplotlib.pyplot as plt #绘图用的模块  
  2. from mpl_toolkits.mplot3d import Axes3D #绘制3D坐标的函数  
  3. fig1=plt.figure()#创建一个绘图对象  
  4. ax=Axes3D(fig1)#用这个绘图对象创建一个Axes对象(有3D坐标)  
  5. fig2=plt.figure()#创建一个绘图对象  
  6. ax=Axes3D(fig2)#用这个绘图对象创建一个Axes对象(有3D坐标)  
  7. plt.show()#显示模块中的所有绘图对象  

运行结果:



①用numpy的arange()方法分别创建横坐标,纵坐标可能的取样点值,分别放入两个arange对象中

②用numpy的meshgrid()方法去建立全部的取样点放入之前的两个arange对象中

*建立和扩充取样点横纵坐标

[python]  view plain  copy
  1. '''''import matplotlib.pyplot as plt #绘图用的模块 
  2. from mpl_toolkits.mplot3d import Axes3D #绘制3D坐标的函数'''  
  3. import numpy as np  
  4. '''''fig1=plt.figure()#创建一个绘图对象 
  5. ax=Axes3D(fig1)#用这个绘图对象创建一个Axes对象(有3D坐标)'''  
  6. X=np.arange(-2,2,1)  
  7. Y=np.arange(-2,2,1)#创建了从-2到2,步长为1的arange对象  
  8. #至此X,Y分别表示了取样点的横纵坐标的可能取值  
  9. print ("X为",X)  
  10. print ("Y为",Y)  
  11. #用这两个arange对象中的可能取值一一映射去扩充为所有可能的取样点  
  12. X,Y=np.meshgrid(X,Y)  
  13. print ("扩充后X为")  
  14. print (X)  
  15. print ("扩充后Y为")  
  16. print (Y)  
  17. '''''plt.show()#显示模块中的所有绘图对象'''  

运行结果:



①用保存取样点横纵坐标的arange对象,传入事先写好的函数,返回给Z,从而为取样点的Z坐标打表

②将三个表传入ax.plot_surface()函数中去用取样点构建曲面,rstride和cstride表示行列隔多少个取样点建一个小面,cmap表示绘制曲面的颜色,在pylot.cm下有很多选项可以选择

附:pylot.title()可以设置总标题,ax.set_xlabel()可以为x坐标注释,y/z同理。

*取样点Z坐标打表,按取样点显示曲面

[python]  view plain  copy
  1. import matplotlib.pyplot as plt #绘图用的模块  
  2. from mpl_toolkits.mplot3d import Axes3D #绘制3D坐标的函数  
  3. import numpy as np  
  4.   
  5. def fun(x,y):  
  6.     return np.power(x,2)+np.power(y,2)  
  7.   
  8. fig1=plt.figure()#创建一个绘图对象  
  9. ax=Axes3D(fig1)#用这个绘图对象创建一个Axes对象(有3D坐标)  
  10. X=np.arange(-2,2,0.1)  
  11. Y=np.arange(-2,2,0.1)#创建了从-2到2,步长为0.1的arange对象  
  12. #至此X,Y分别表示了取样点的横纵坐标的可能取值  
  13. #用这两个arange对象中的可能取值一一映射去扩充为所有可能的取样点  
  14. X,Y=np.meshgrid(X,Y)  
  15. Z=fun(X,Y)#用取样点横纵坐标去求取样点Z坐标  
  16. plt.title("This is main title")#总标题  
  17. ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.coolwarm)#用取样点(x,y,z)去构建曲面  
  18. ax.set_xlabel('x label', color='r')  
  19. ax.set_ylabel('y label', color='g')  
  20. ax.set_zlabel('z label', color='b')#给三个坐标轴注明  
  21. plt.show()#显示模块中的所有绘图对象  

运行结果:



补充:用numpy的mgrid可以将建立取样点横纵坐标和扩充取样点这两项工作合并起来做,语法如下:

X,Y=numpy.mgrid[X的取样下限:X的取样上限:X的分割数j,Y的取样下限:Y的取样上限:Y的分割数j]

另外,ax.plot_surface()里有一个参数alpha可以设置不透明度。

*建立和扩充合并做,设置不透明度为0.5

[python]  view plain  copy
  1. import matplotlib.pyplot as plt #绘图用的模块  
  2. from mpl_toolkits.mplot3d import Axes3D #绘制3D坐标的函数  
  3. import numpy as np  
  4.   
  5. def fun(x,y):  
  6.     return np.power(x,2)+np.power(y,2)  
  7.   
  8. fig1=plt.figure()#创建一个绘图对象  
  9. ax=Axes3D(fig1)#用这个绘图对象创建一个Axes对象(有3D坐标)  
  10. '''''X=np.arange(-2,2,0.1) 
  11. Y=np.arange(-2,2,0.1)#创建了从-2到2,步长为0.1的arange对象 
  12. #至此X,Y分别表示了取样点的横纵坐标的可能取值 
  13. #用这两个arange对象中的可能取值一一映射去扩充为所有可能的取样点 
  14. X,Y=np.meshgrid(X,Y)'''  
  15. X,Y=np.mgrid[-2:2:40j,-2:2:40j]#从-2到2分别生成40个取样坐标,并作满射联合  
  16. Z=fun(X,Y)#用取样点横纵坐标去求取样点Z坐标  
  17. plt.title("This is main title")#总标题  
  18. ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.coolwarm,alpha=0.5)#用取样点(x,y,z)去构建曲面  
  19. ax.set_xlabel('x label', color='r')  
  20. ax.set_ylabel('y label', color='g')  
  21. ax.set_zlabel('z label', color='b')#给三个坐标轴注明  
  22. plt.show()#显示模块中的所有绘图对象  

运行结果:


鼠标拖动可以从不同角度来观察函数图像。


你可能感兴趣的:(用matplotlib绘制3D函数图像)