请问 matplotlib 中 ax.clear 有什么作用?

2021-01-18 20:59:52 +08:00
 yellowtail
在网上找的代码,修改的时候发现如果在 drawImg 函数中注释掉 ax.clear()那么出来的绘制出来颜色会一直变化。
去除 ax.clear()以后除了颜色变化还有其他的副作用吗?




import numpy as np
from tkinter import *
from tkinter import messagebox
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
# 创建画布需要的库
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

root = Tk()
root.title("tkinter + Matplotlib")
root.geometry('700x750')


plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
fig = plt.figure(figsize=(6.5, 7), edgecolor='blue')
ax = Axes3D(fig)
# 定义刻度
ax.set_xlim(0, 100)
ax.set_ylim(0, 100)
ax.set_zlim(0, 100)
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
# 显示画布
canvas.get_tk_widget().pack()

i = 0
# 定义存储坐标的空数组
x = []
y = []
z = []


# 抛物线动态绘制函数
def drawImg():
global i
i += 1
global ax
#ax.clear()
ax.set_xlim(0, 100)
ax.set_ylim(0, 100)
ax.set_zlim(0, 100)
global x
global y
global z
t = i * 0.1
dtax = 20 * t * np.sin(0.25 * np.pi)
x.append(dtax)
dtay = 20 * t * np.cos(0.25 * np.pi)
y.append(dtay)
dtaz = 100 - t ** 2 * 0.5 * 10
z.append(dtaz)
ax.plot(x, y, z)
canvas.draw()
global afterHandler
afterHandler = root.after(100, drawImg)


drawImg()


def on_closing():
root.after_cancel(afterHandler)
answer = messagebox.askokcancel("退出", "确定退出吗?")
if answer:
plt.close('all')
root.destroy()
else:
root.after(1000, drawImg)


root.protocol("WM_DELETE_WINDOW", on_closing)
root.mainloop()
1318 次点击
所在节点    Python
1 条回复
hxhc
2021-01-19 09:26:21 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/746075

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX