首页 > 编程问答 >如何使用 for 循环在 python jupyter 笔记本中创建动态图?

如何使用 for 循环在 python jupyter 笔记本中创建动态图?

时间:2024-07-20 23:32:31浏览次数:12  
标签:python matplotlib jupyter-notebook

我正在学习 本课 关于用Python求解热方程。该课程指出,在求解热方程后,我们可以通过在循环中简单地调用 pyplot.plot() 来可视化解的动画图,其中下面的代码将动态绘制每次每个点的温度,从而得到一个动画情节(课程帖子中提供了动画情节的示例)。

import numpy
from matplotlib import pyplot

length = 2
k = .466
temp_left = 200
temp_right = 200

total_time = 4

dx = .1
x_vec = numpy.linspace(0, length, int(length/dx))

dt = .0001
t_vec = numpy.linspace(0, total_time, int(total_time/dt))

u = numpy.zeros([len(t_vec), len(x_vec)])

u[:, 0] = temp_left
u[:, -1] = temp_right

for t in range(1, len(t_vec)-1):
    for x in range(1, len(x_vec)-1):
        u[t+1, x] = k * (dt / dx**2) * (u[t, x+1] - 2*u[t, x] +
                                        u[t, x-1]) + u[t, x]

    pyplot.plot(x_vec, u[t], 'black')
    pyplot.pause(.001)
    pyplot.cla()


pyplot.plot(x_vec, u[0])
pyplot.ylabel("Temperature (C˚)")
pyplot.xlabel("Distance Along Rod (m)")
pyplot.show()

我刚刚学习编码,这对我来说是全新的。我正在使用 jupyter 笔记本版本 7.1.2。我将代码放入 jupyter 笔记本单元中,运行该单元,并期望得到一个动态图。相反,我得到的是许多静态图。

我查看了此处的示例 ,看看是否可以修改代码以适用于我的应用程序。在尝试每个示例时,我都会得到一个空白数字,如下所示: to see if I can modify the code to work for my application. In trying every example I would get a blank figure, like so: Screenshot of jupyter notebook code and resulting blank figure


你遇到的问题是,在 Jupyter 笔记本中, pyplot.pause(.001) 并不会创建真正的动画。在像脚本一样运行时, pyplot.pause(.001) 会暂停执行,显示图像,然后在继续之前清除图像。然而,在 Jupyter 笔记本中,绘图命令会一直累积,直到循环结束,此时会显示所有图像,给人一种静态输出的感觉。

为了在 Jupyter 笔记本中创建动态绘图,你需要使用 matplotlib.animation 模块。下面是使用 FuncAnimation 函数修改后的代码:

import numpy
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

length = 2
k = .466
temp_left = 200
temp_right = 200

total_time = 4

dx = .1
x_vec = numpy.linspace(0, length, int(length/dx))

dt = .0001
t_vec = numpy.linspace(0, total_time, int(total_time/dt))

u = numpy.zeros([len(t_vec), len(x_vec)])

u[:, 0] = temp_left
u[:, -1] = temp_right

for t in range(1, len(t_vec)-1):
    for x in range(1, len(x_vec)-1):
        u[t+1, x] = k * (dt / dx**2) * (u[t, x+1] - 2*u[t, x] +
                                        u[t, x-1]) + u[t, x]

# 创建图形和坐标轴
fig, ax = plt.subplots()

# 创建初始线条
line, = ax.plot(x_vec, u[0], 'black')

# 定义更新函数
def animate(i):
    line.set_ydata(u[i])
    return line,

# 创建动画
ani = FuncAnimation(fig, animate, frames=len(t_vec), interval=10, blit=True)

# 设置轴标签
plt.ylabel("Temperature (C˚)")
plt.xlabel("Distance Along Rod (m)")

# 显示动画
plt.show()

这段代码创建了一个动画,其中每个帧都调用 animate 函数来更新线条的数据。 FuncAnimation 函数使用 fig 参数指定图形,使用 animate 参数指定更新函数,使用 frames 参数指定帧数,使用 interval 参数指定帧之间的毫秒数。 blit=True 参数告诉 matplotlib 只更新图中已更改的部分,从而提高动画性能。

这个修改后的代码应该在你的 Jupyter 笔记本中创建一个动态绘图。

标签:python,matplotlib,jupyter-notebook
From: 78773171

相关文章

  • Python:动态爱心代码
    importrandomfrommathimportsin,cos,pi,logfromtkinterimport*CANVAS_WIDTH=640CANVAS_HEIGHT=480CANVAS_CENTER_X=CANVAS_WIDTH/2CANVAS_CENTER_Y=CANVAS_HEIGHT/2IMAGE_ENLARGE=11HEART_COLOR="#FF99CC"defcenter_......
  • 如何在 PYTHON 中查找输入数字的千位、百位、十位和个位中的数字?例如:256 有 6 个一、5
    num=int(input("Pleasegivemeanumber:"))print(num)thou=int((num//1000))print(thou)hun=int((num//100))print(hun)ten=int((num//10))print(ten)one=int((num//1))print(one)我尝试过这个,但它不起作用,我被困住了。代码几乎是正确的,但需......
  • ModuleNotFoundError:没有名为“pyaes”的模块 python 虚拟机
    在此处输入图像描述当我在启动python项目的虚拟机上构建某个工具时,几秒钟后会出现此消息。我已经尝试重新安装pyaes但无济于事。谁能帮我?非常感谢我已经尝试重新安装pyaes但无济于事,我搜索了tepyaes模块的十个路径,但我没有找到它,而我在另一台虚拟机上完成了......
  • 如何通过 mutagen (Python) 为 mp3 文件中的情绪添加价值?
    我找不到通过mutagen(Python库)将情绪写入mp3文件的方法初始化:frommutagen.mp3importMP3frommutagen.id3importID3,TIT2,TALB,TPE1,TPE2,TCON,TPUB,TENC,TIT3,APIC,WOAR,PRIVaudio=MP3(mp3_file,ID3=ID3)我可以使用audio['TIT3']=TIT3(......
  • 使用 Python 操作 Splunk
    使用Python操作Splunk目录使用Python操作Splunk1参考文档2安装PythonSplunk-SDK3连接splunk4配置查询5参考1参考文档SplunkGithub地址:GitHub-splunk/splunk-sdk-python:SplunkSoftwareDevelopmentKitforPythonSplunk开发者文档地址:Pythontools|......
  • Python:如何通过请求帖子对评论进行投票?
    我对评论进行投票的代码无法正常工作。它返回一个http500错误。我有一个使用用户登录的Python程序,它应该自动对评论进行投票。我的代码如下:frombs4importBeautifulSoupimportrequestslogin_url="https://xxxxxxxxxxx/auth/login"login_url_post="http......
  • python_day7(补1)
    数据类型​ 之前为列表类型​ 插入一个元组的介绍 之后还有字典,三者区别为括号方式()[]{}元组类型(tuple)使用:先定义一个元组数据​ vegetable_tuple='(tomato','corn','cucumber','carrot','corn','pumpkin)'与列表类型格式很像,不过只能取不能改,需要特......
  • 在 python 中写入 %appdata% 时出现奇怪的行为
    我试图将一些数据写入%appdata%。一切似乎都像Script1的输出中所示的那样工作。正在创建新目录并保存文件,并且也成功检索数据。但尝试查看文件资源管理器中的数据时,该文件夹不存在!CMD也找不到文件和目录。后来我手动创建了文件,检查了一下,发生了什么。CMD现在可以找到该文......
  • 使用 selenium 在 python 中打开 chrome 中的链接
    通过此链接https://bancadatistatisticaoas.inail.it/analytics/saw.dll?Dashboard&PortalPath=%2Fshared%2FBDS%2F_portal%2FINF_Definiti_Industria_e_Servizi我需要单击“FCostruzioni”,然后单击F41COSTRUZIONIED埃迪菲西。这是我的代码,但它不起作用。我做错了......
  • 七大排序算法的Python实现
    七大排序算法的Python实现1.冒泡排序(BubbleSort)算法思想冒泡排序通过重复交换相邻的未按顺序排列的元素来排序数组。每次迭代都将最大的元素“冒泡”到数组的末尾。复杂度分析时间复杂度:O(n^2)空间复杂度:O(1)defbubble_sort(arr):n=len(arr)for......