【1】引言
在前述学习进程中,已经初步掌握三维动画输出和散点图动画输出基本技能,可通过下述链接直达:
python画图|散点图动态输出-CSDN博客
python动画教程|Animations using Matplotlib-官网教程程序解读_如何用python制作微动画-CSDN博客
在此基础上,很容易想到在三维空间输出散点动画,经过一段时间的探索,这个技能已经初步掌握,现在分享给大家。
【2】核心代码
【2.1】ax = fig.add_subplot(projection='3d')
在前述有关联的学习中,可以分为三大类:三维图、散点图和动画。
经过追溯,画三维图需要使用下述代码进行说明:
ax = fig.add_subplot(projection='3d')
使用这些代码的文章链接包括且不限于:
python画图|同时输出二维和三维图_python怎么输出3d图-CSDN博客
python画图|极坐标下的3D surface_python 图片surface3d-CSDN博客
python画图|3D直方图基础教程-CSDN博客
【2.2】plt.scatter(x,y)或ax.scatter(x,y)
画散点图需要使用下述代码进行说明:
plt.scatter(x,y)
或
ax.scatter(x,y)
使用这些代码的文章链接包括且不限于:
python画散点图|scatter()函数小试牛刀(入门级教程)_python ax.scatter-CSDN博客
python画图|极坐标中画散点图_极坐标散点图-CSDN博客
【2.3】plt.scatter(x,y)或ax.scatter(x,y)
画动画需要使用下述代码进行说明:
ani = animation.FuncAnimation(fig, animate, interval=50)
使用这些代码的文章链接包括且不限于:
python动画教程|Animations using Matplotlib-官网教程程序解读_如何用python制作微动画-CSDN博客
python画图|曲线动态输出基础教程-CSDN博客
python画图|散点图动态输出-CSDN博客
【3】自主编写三维散点图输出代码
按照以前的学习思路,首先引入关键模块:计算、画图和动画:
import numpy as np #引入计算模块 import matplotlib.pyplot as plt #引入画图模块 import matplotlib.animation as animation #引入动画模块
然后定义画图:
fig=plt.figure() #定义要画图 ax=fig.add_subplot(projection='3d') #定义画三维图
之后定义变量和初始值:
t=np.linspace(0,2*np.pi,100) #定义自变量 x=ax.scatter(0,0,0) #定义初始值
在此基础上进行动画函数的自定义,以实现散点逐个输出:
def animate(i): #定义动画函数,将散点图逐个输出 ax.scatter(t[i],np.cos(t[i]),np.sin(t[i])) return x
最后制作动画将其输出:
ani=animation.FuncAnimation( #输出动画 fig,animate,repeat=True,interval=10 ) plt.show() #输出图形
输出图形为:
图1
至此的完整代码为:
import numpy as np #引入计算模块
import matplotlib.pyplot as plt #引入画图模块
import matplotlib.animation as animation #引入动画模块
fig=plt.figure() #定义要画图
ax=fig.add_subplot(projection='3d') #定义画三维图
t=np.linspace(0,2*np.pi,50) #定义自变量
x=ax.scatter(0,0,0) #定义初始值
def animate(i): #定义动画函数,将散点图逐个输出
ax.scatter(t[i],np.cos(t[i]),np.sin(t[i]))
return x
ani=animation.FuncAnimation( #输出动画
fig,animate,repeat=True,interval=10)
ani.save('scatter-aixmls.gif') #保存动画
plt.show() #输出图形
【4】代码改写
尝试画两条曲线,定义代码如下:
x=ax.scatter(0,0,0) y=ax.scatter(0,0,0) def animate(i): ax.scatter(t[i],np.cos(t[i]),np.sin(t[i])) ax.scatter(t[i], np.sin(t[i]), np.cos(t[i])) return x,y
输出图像为:
图2
对应完整代码为:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.projections import projection_registry
fig=plt.figure()
ax=fig.add_subplot(projection='3d')
t=np.linspace(0,2*np.pi,100)
x=ax.scatter(0,0,0)
y=ax.scatter(0,0,0)
def animate(i):
ax.scatter(t[i],np.cos(t[i]),np.sin(t[i]))
ax.scatter(t[i], np.sin(t[i]), np.cos(t[i]))
return x,y
ani=animation.FuncAnimation(
fig,animate,repeat=True,interval=10
)
ax.legend()
ani.save('scatter-aixmls-2lines.gif') #保存动画
plt.show()
【5】增加图名
非常简单,给图像增加名称:
ax.set_title('3d-scatter-aixmls-2lines')
图3
【6】总结
自主探索了三维散点图输出教程。