我希望看到连续绘图的效果,使用以下代码(在python3中):
import numpy as np
import matplotlib.pyplot as plt
import time as time
fg = plt.figure()
ax = fg.add_subplot(1,1,1)
plt.ion()
for d in range(3):
x_data = np.array([])
y_data = np.array([])
#plt.clf()
for t in range(v):
x = t
x_data = np.append(x_data,x)
y = t*d
y_data = np.append(y_data,y)
#ax.lines = ax.plot(x_data,y_data)
plt.plot(x_data,y_data)
#plt.show()
#plt.pause(0.3)
time.sleep(0.3)
plt.show()
plt.close('all')
但它总是不起作用(它画3张时),是否将代码(plt.show())放在循环中或外面。
答案 0 :(得分:0)
几个问题:
time.sleep
。它会让应用程序休眠(=冻结)plt.ion()
,则会调用plt.pause()
来引入一些延迟。plt.show()
之前,通过plt.ioff()
关闭互动模式是有道理的,否则情节会在循环后直接消失。完整示例:
import numpy as np
import matplotlib.pyplot as plt
fg = plt.figure()
ax = fg.add_subplot(1,1,1)
plt.ion()
for d in range(3):
x_data = np.array([])
y_data = np.array([])
v=3
for t in range(v):
x = t
x_data = np.append(x_data,x)
y = t*d
y_data = np.append(y_data,y)
plt.plot(x_data,y_data)
plt.pause(0.3)
plt.ioff()
plt.show()
可以使用FuncAnimation
代替交互模式。以上就像
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fg = plt.figure()
ax = fg.add_subplot(1,1,1)
def update(d):
x_data = np.array([])
y_data = np.array([])
v=3
for t in range(v):
x = t
x_data = np.append(x_data,x)
y = t*d
y_data = np.append(y_data,y)
plt.plot(x_data,y_data)
ani = FuncAnimation(fg, update)
plt.show()