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

文章目录

*
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):

    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):

    if len(ax.lines) == 2:
        ax.lines.pop(1)

    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()
x2 = np.array(list(reversed(x)))
line2, = ax2.plot(x2, np.sin(x2+2**np.pi), color='green')

sin = True

def animate(i):

    global sin, x
    if sin:
        if len(ax.lines) == 2:
            ax.lines.pop(1)

        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 x[i] >= 7.0:
            sin = False
            ax.lines.pop()
            ax.texts.pop()
    else:
        if len(ax2.lines) == 2:
            ax2.lines.pop(1)

        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、结果

用Python绘制一个运动在二维函数上的动点(使用matplotlib.animation)
申明:本篇博文可能是全网 第一个讲解这类需求的画图实例,以上代码 不得转载,或 盗用作付费资源。by_Neuer_桓
原创不易,有帮助请 点个赞吧,感谢你的支持!有错误也请指出,谢谢。
ps:近期学业/工作繁忙,全网博客暂不更新了,还请见谅。2022年3月12日留。

Original: https://blog.csdn.net/qq_44853197/article/details/121578583
Author: TerryBlog
Title: 用Python绘制一个运动在二维函数上的动点(使用matplotlib.animation)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/764744/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球