7.1、使用mtplot3d绘制3D图表 7.1.1、mplot3d概述 mplot3d是matplotlib中专门绘制3D图表的工具包,它主要包含一个继承自Axes的子类Axes3D,使用Axes3D类可以构建一个三维坐标系的绘图区域。matpl otlib可以通过两种方式创建Axes3d类的对象:一种方式是Axes3D()方法,另一种方式是add_subplot()方法。 1、Axes3D()方法 Axes3D()方法是构造方法,它直接用于构建一个Axes3D类的对象 2、add_subplot()方法 在调用add_subplot()方法添加绘图区域时为该方法传入projection=‘3d’,即指定坐标系的类型为三维坐标系,返回一个Axes3D对象。 7.1.2、绘制常见的3D图表 1、绘制3D线框图 import matplotlib.pyplot as plot from mpl_toolkits.mplot3d import axes3d fig=plt.figure() ax=fig.add_subplot(111,projection=‘3d’) X,Y,Z=axes3d.get_test_data(0.05) ax.plot_wireframe(X,Y,Z,rstride=10,cstride=10) plt.title(‘51’) plt.show() 2、绘制3D曲面图 import matplotlib.pyplot as plot from mpl_toolkits.mplot3d import axes3d from matplotlib import cm import numpy as np x1=np.arange(-5,5,0.25) y1=np.arange(-5,5,0.25) x1,y1=np.meshgrid(x1,y1) r1=np.sqrt(x12+y12) z1=np.sin(r1) fig=plt.figure() ax=fig.add_subplot(111,projection=‘3d’) ax.plot_surface(x1,y1,z1,cmap=cm.coolwarm,linewidth=0, antialiased=False) ax.set_zlim(-1.01,1.01) plt.title(‘51’) plt.show() 7.1.3、实例1:三维空间的星星 实例代码如下: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d plt.rcParams[“font.sans-serif”]=[“SimHei”] plt.rcParams[“axes.unicode_minus”]=False x=np.random.randint(0,40,30) y=np.random.randint(0,40,30) z=np.random.randint(0,40,30) fig=plt.figure() ax=fig.add_subplot(111,projection=‘3d’) for xx,yy,zz in zip(x,y,z): color=‘y’ if 10<zz<20: color=‘skyblue’ elif zz>=20: color=‘#C71585’ ax.scatter(xx,yy,zz,c=color,marker=‘',s=160, linewidth=1,edgecolor=‘white’) ax.set_xlabel(‘x轴’) ax.set_ylabel(‘y轴’) ax.set_zlabel(‘z轴’) ax.set_title(‘3D散点图 51’,fontproperties=‘simhei’,fontsize=14) plt.tight_layout() plt.show() 7.2、使用animation制作动图 7.2.1、animation概述 matplotlib在1.1版本的标准库中加入了动画模块——animation,使用改模块Animation类可以实现一些基本的动画效果。Animation类是一个动画基类,它针对于不同的行为分别派生了不同的子类,主要包括FuncAnimation类和Artist Animation类,其中FuncAnimation类表示基于重复调用一个函数的动画;Artist Animation类表示基于一个固定Artist对象的动画。 1、FuncAnimation类 FuncAnimation类是基于函数的动画,它通过重复调用同一个函数来制作动画 fig:表示动画所在的画布 func:表示每帧动画调用的函数 frames:表示动画的长度 init_func:表示用于开始绘制帧的函数 fargs:表示传递给func函数的其他函数 interval:表示更新动画的频率 blit:表示是否更新所有的点 2、ArtistAnimation类 示例代码如下: import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import ArtistAnimation x=np.arange(0,2np.pi,0.01) fig,ax=plt.subplots() arr=[] for i in range(5): line=ax.plot(x,np.sin(x+i)) arr.append(line) ani=ArtistAnimation(fig=fig,artists=arr,repeat=True) plt.title(‘51’) plt.show() 7.2.2、实例2:三维空间闪烁的空间 示例代码如下: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d from matplotlib.animation import FuncAnimation plt.rcParams[“font.sans-serif”]=[“SimHei”] plt.rcParams[“axes.unicode_minus”]=False xx=np.array([13,5,25,13,9,18,3,39,13,27]) yy=np.array([4,38,16,26,7,19,23,25,10,15]) zz=np.array([7,19,6,12,25,19,23,25,10,15]) fig=plt.figure() ax=fig.add_subplot(111,projection=‘3d’) star=ax.scatter(xx,yy,zz,c=’#C71585’,marker=‘‘,s=160) def animate(i): if i%2: color=’#C71585’ else: color=‘white’ next_star=ax.scatter(xx,yy,zz,c=color,marker='’,s=160, linewidth=1,edgcolor=‘black’) return next_star def init(): return star ani=FuncAnimation(fig=fig,func=animate,frames=None,init_func=init, interval=1000,blit=False) ax.set_xlabel(‘x轴’) ax.set_ylabel(‘y轴’) ax.set_zlabel(‘z轴’) ax.set_title(‘3D散点图 51’,fontproperties=‘simhei’,fontsize=14) plt.tight_layout() plt.show()
|