1、代码
使用Python中的matplotlib.animation库进行动点的绘制。
可以从官网进行学习,里面有很多有意思的动图绘制。matplotlib官网~
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots()
x = np.arange(0, 2*np.pi, 0.1)
line, = ax.plot(x, np.sin(x))
def animate(i):
# update the data.
# 如果你打印一下i,就能明白为什么要设置为2
if len(ax.lines) == 2:
ax.lines.pop(1)
ax.plot(x[i], np.sin(x)[i], 'o', color='red')
return line, ax
ani = animation.FuncAnimation(
fig, animate, frames=x.size, interval=100, blit=False, save_count=50)
plt.show()
2、结果
本次编写的目的是为了测试一下群体智能算法的优化策略。会不定期会更新,优化或添加解析。
———————————————————————————更新———————————————————————————
3、加入带文本标签的代码
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 不得转载
fig, ax = plt.subplots()
x = np.arange(0, 2*np.pi, 0.1)
line, = ax.plot(x, np.sin(x))
def animate(i):
# update the data.
# 如果你打印一下i,就能明白为什么要设置为2
if len(ax.lines) == 2:
ax.lines.pop(1)
# List 的 pop 方法默认删除最后一个元素, 但是我们要删除的是上一个存在的
if len(ax.texts) > 0:
ax.texts.pop(0)
ax.plot(x[i], np.sin(x)[i], 'o', color='red')
ax.text(x[i], np.sin(x)[i], ' ('+str(round(x[i], 2))+','+str(round(np.sin(x)[i], 2))+'+)', fontsize=10)
return line, ax
ani = animation.FuncAnimation(
fig, animate, frames=x.size, interval=500, blit=False, save_count=50)
plt.show()
4、结果
5、解决两个函数中动点如何运动的问题
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 不得转载
fig, ax = plt.subplots()
x = np.arange(0, 2.25*np.pi, 0.1)
line, = ax.plot(x, np.sin(x), color='blue')
ax2 = ax.twinx() # 让2个子图的x轴一样,同时创建副坐标轴
x2 = np.array(list(reversed(x)))
line2, = ax2.plot(x2, np.sin(x2+2**np.pi), color='green')
sin = True
def animate(i):
# update the data.
# 如果你打印一下i,就能明白为什么要设置为2
global sin, x
if sin:
if len(ax.lines) == 2:
ax.lines.pop(1)
# List 的 pop 方法默认删除最后一个元素, 但是我们要删除的是上一个存在的
if len(ax.texts) > 0:
ax.texts.pop(0)
ax.plot(x[i], np.sin(x)[i], 'o', color='red')
ax.text(x[i], np.sin(x)[i], ' (' + str(round(x[i], 2)) + ',' + str(round(np.sin(x)[i], 2)) + '+)', fontsize=10)
print(x[i]) # 通过打印查看下面if的判断条件
if x[i] >= 7.0: # 这个判断条件看精度和区间长度而定,对应2.25*np.pi和0.1
sin = False
ax.lines.pop()
ax.texts.pop()
else:
if len(ax2.lines) == 2:
ax2.lines.pop(1)
# List 的 pop 方法默认删除最后一个元素, 但是我们要删除的是上一个存在的
if len(ax2.texts) > 0:
ax2.texts.pop(0)
ax2.plot(x2[i], np.sin(x2+2**np.pi)[i], 'o', color='red')
ax2.text(x2[i], np.sin(x2+2**np.pi)[i], ' (' + str(round(x2[i], 2)) + ',' + str(round(np.sin(x2+2**np.pi)[i], 2)) + '+)', fontsize=10)
if x2[i] <= 0:
sin = True
ax2.lines.pop()
ax2.texts.pop()
return line, ax, line2, ax2
ani = animation.FuncAnimation(
fig, animate, frames=x.size, interval=100, blit=False, save_count=50)
plt.show()
6、结果
申明:本篇博文可能是全网第一个讲解这类需求的画图实例,以上代码不得转载,或盗用作付费资源。by_Neuer_桓
原创不易,有帮助请点个赞吧,感谢你的支持!有错误也请指出,谢谢。
ps:近期学业/工作繁忙,全网博客暂不更新了,还请见谅。2022年3月12日留。