You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib中ion()/ioff()未达预期效果,是否理解有误?

Matplotlib交互模式测试疑问

测试代码片段

片段1:启用交互模式(plt.ion()),未调用fig.canvas.draw()

import numpy as np
import matplotlib.pyplot as plt

x = np.array([])
y_1 = np.array([])
y_2 = np.array([])

plt.ion()

fig = plt.figure(figsize=(9,4))
ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(1,2,2)

fig.show()

for i in range(0, 100000):
    x = np.append(x, i)
    y_1 = np.append(y_1, i**2)
    y_2 = np.append(y_2, i**3)

    ax1.clear()
    ax2.clear()
    ax1.scatter(x, y_1)
    ax2.scatter(x, y_2)

    #fig.canvas.draw()
    plt.pause(0.02)

片段2:启用交互模式(plt.ion()),调用fig.canvas.draw()

import numpy as np
import matplotlib.pyplot as plt

x = np.array([])
y_1 = np.array([])
y_2 = np.array([])

plt.ion()

fig = plt.figure(figsize=(9,4))
ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(1,2,2)

fig.show()

for i in range(0, 100000):
    x = np.append(x, i)
    y_1 = np.append(y_1, i**2)
    y_2 = np.append(y_2, i**3)

    ax1.clear()
    ax2.clear()
    ax1.scatter(x, y_1)
    ax2.scatter(x, y_2)

    fig.canvas.draw()
    plt.pause(0.02)

片段3:关闭交互模式(plt.ioff()),未调用fig.canvas.draw()

import numpy as np
import matplotlib.pyplot as plt

x = np.array([])
y_1 = np.array([])
y_2 = np.array([])

plt.ioff()

fig = plt.figure(figsize=(9,4))
ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(1,2,2)

fig.show()

for i in range(0, 100000):
    x = np.append(x, i)
    y_1 = np.append(y_1, i**2)
    y_2 = np.append(y_2, i**3)

    ax1.clear()
    ax2.clear()
    ax1.scatter(x, y_1)
    ax2.scatter(x, y_2)

    #fig.canvas.draw()
    plt.pause(0.02)

测试现象

三段代码的表现完全一致:绘图窗口均会自动更新、重绘,未观察到任何差异。

疑问与参考说明

参考文档中关于ion()的描述如下:

pyplot接口的交互属性控制是否在每个pyplot命令后绘制图形画布。若交互为False,图形状态会在每个绘图命令后更新,但仅在显式调用draw()时才会绘制;若交互为True,则每个pyplot命令都会触发绘制。

按照上述描述,片段3关闭了交互模式且未调用fig.canvas.draw(),理论上图形不应自动更新/重绘,但实际测试中表现与前两段一致。请问我的理解是否正确,还是遗漏了什么关键点?


内容的提问来源于stack exchange,提问作者Deepak Tatyaji Ahire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:55:20