Python中使用plt.ion()和plt.ioff()画动态图

本文详细介绍了如何使用matplotlib的交互模式(plt.ion())和阻塞模式(plt.show())来展示动态图和多个窗口。在交互模式下,可以实现在脚本运行过程中实时更新图像,而无需等待plt.show()。文章还强调了在使用plt.show()前关闭交互模式(plt.ioff())的重要性,以确保图像能够常留而不一闪而过。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为python可视化库matplotlib的显示模式默认为阻塞(block)模式(即:在plt.show()之后,程序会暂停到那儿,并不会继续执行下去)。如何 展示动态图或多个窗口 呢?

使用plt.ion()这个函数,使matplotlib的显示模式转换为交互(interactive)模式。即使在脚本中遇到plt.show(),代码还是会继续执行。

import matplotlib.pyplot as plt
    plt.ion()    # 打开交互模式
    # 同时打开两个窗口显示图片
    plt.figure()  #图片一
    plt.imshow(i1)
    plt.figure()    #图片二
    plt.imshow(i2)
    # 显示前关掉交互模式
    plt.ioff()
    plt.show()

plt.show()之前一定不要忘了加plt.ioff(),如果不加,界面会一闪而过,并不会停留。

在交互模式下:

1、plt.plot(x)或plt.imshow(x)是直接出图像,不需要plt.show()。

2、如果在脚本中使用ion()命令开启了交互模式,没有使用ioff()关闭的话,则图像会一闪而过,并不会常留。要想防止这种情况,需要在plt.show()之前加上ioff()命令。

在阻塞模式下:

1、打开一个窗口以后必须关掉才能打开下一个新的窗口。这种情况下,默认是不能像Matlab一样同时开很多窗口进行对比的。

2、plt.plot(x)或plt.imshow(x)是直接出图像,需要plt.show()后才能显示图像。

参考链接:matplotlib 画动态图以及plt.ion()和plt.ioff()的使用

实战案例:PyTorch实战示例01——regression

### Python Matplotlib 散点图保存文件路径问题解决方案 当使用 `matplotlib` 的 `scatter()` 函数绘制散点图并尝试通过 `savefig()` 方法保存图形时,可能会遇到无法正确保存文件的问题。这通常是因为绘图窗口未完全渲染完成就调用了保存命令。 为了确保图片能够被正确保存到指定路径,建议按照以下方法操作: #### 正确顺序执行保存展示命令 应当先调用 `plt.savefig()` 来保存图表至目标位置,之后再调用 `plt.show()` 显示图表[^2]。这样可以避免由于显示窗口尚未准备好而导致的空白图像问题。 ```python import matplotlib.pyplot as plt # 创建散点图 p1 = plt.scatter([0, 1], [0, 1]) # 设置保存参数 savename = 'output_scatter_plot.png' # 保存图像前关闭交互模式(如果开启的话) plt.ioff() # 保存图像 plt.savefig(savename) # 打开交互模式以便后续查看图像 plt.ion() # 展示图像 plt.show() ``` #### 清理布缓存 为了避免内存泄漏以及旧数据残留影响新图生成,在每次绘图结束后应该清理当前布上的内容。可以通过调用 `plt.clf()` 或者更彻底地清除整个Figure对象来实现这一点。 ```python # 完成上述代码片段中的绘图与保存后... # 清除当前轴的内容 plt.gca().cla() # 或者清空整个figure plt.gcf().clear() ``` #### 使用上下文管理器简化流程 对于更加复杂的场景,推荐采用with语句配合临时文件夹的方式来进行安全的操作,从而减少潜在错误的发生几率。 ```python from tempfile import TemporaryDirectory import os.path with TemporaryDirectory() as tmpdir: savename = os.path.join(tmpdir, "temp_output.png") # 进行绘图... p1 = plt.scatter([0, 1], [0, 1]) plt.savefig(savename) plt.close('all') # 关闭所有打开的figures # 可选:读取刚刚保存的文件进行验证或其他处理 with open(savename, 'rb') as f: content = f.read() print("已完成绘图并成功保存.") ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yale曼陀罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值