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
相关产品推荐
相关产品推荐

