如何在matplotlib中的数字上绘制一些图像

时间:2018-01-17 03:08:35

标签: python matplotlib

我希望看到连续绘图的效果,使用以下代码(在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())放在循环中或外面。

1 个答案:

答案 0 :(得分:0)

几个问题:

  1. 切勿在GUI应用程序中使用time.sleep。它会让应用程序休眠(=冻结)
  2. 如果使用plt.ion(),则会调用plt.pause()来引入一些延迟。
  3. 在致电plt.show()之前,通过plt.ioff()关闭互动模式是有道理的,否则情节会在循环后直接消失。
  4. 完整示例:

    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()