用Python绘制一个运动在二维函数上的动点(使用matplotlib.animation)

您所在的位置:网站首页 直线运动怎么画图像的 用Python绘制一个运动在二维函数上的动点(使用matplotlib.animation)

用Python绘制一个运动在二维函数上的动点(使用matplotlib.animation)

2023-06-27 06:54| 来源: 网络整理| 查看: 265

文章目录 1、代码2、结果3、加入带文本标签的代码4、结果5、解决两个函数中动点如何运动的问题6、结果

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]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3