美文网首页
matplotlib画动态图

matplotlib画动态图

作者: z_1900 | 来源:发表于2018-08-28 11:37 被阅读0次

    matplotlib的显示模式

    默认为block阻塞,执行后停止,无法动态
    1.[plt.ion()]将显示模式转换为interactive模式

    https://blog.csdn.net/zbrwhut/article/details/80625702\

        import matplotlib.pyplot as plt
        plt.ion()    # 打开交互模式
        # 同时打开两个窗口显示图片
        plt.figure()  #图片一
        plt.imshow(i1)
        plt.figure()    #图片二
        plt.imshow(i2)
        # 显示前关掉交互模式
        plt.ioff()
        plt.show()
    
    

    在plt.show()之前一定不要忘了加plt.ioff(),如果不加,界面会一闪而过,并不会停留。

    import tensorflow as tf
    import numpy as np
    import matplotlib.pyplot as plt
     
    def add_layer(inputs,in_size,out_size,activation_funiction=None):
     
        Weights = tf.Variable(tf.random_normal([in_size,out_size]))
        biases = tf.Variable(tf.zeros([1,out_size]) +0.1)
        Wx_plus_b = tf.matmul(inputs,Weights)+biases
        if activation_funiction is None:
            outputs = Wx_plus_b
        else:
            outputs = activation_funiction(Wx_plus_b)
        return outputs
     
    x_data = np.linspace(-1,1,300)[:,np.newaxis]
    noise = np.random.normal(0,0.05,x_data.shape)
    y_data = np.square(x_data)-0.5 +noise
     
    xs = tf.placeholder(tf.float32,[None,1])   
    ys = tf.placeholder(tf.float32,[None,1])
     
    #add hidden layer
    l1 = add_layer(xs,1,10,activation_funiction=tf.nn.relu)
    #add output layer
    prediction = add_layer(l1,10,1,activation_funiction=None)
     
    #the error between prediction and real data
    loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
     
    init =tf.initialize_all_variables()
     
    with tf.Session() as sess:
        sess.run(init)
     
        fig = plt.figure()
        ax = fig.add_subplot(1,1,1)
        ax.scatter(x_data,y_data)
        plt.ion()   #将画图模式改为交互模式
     
        for i in range(1000):
            sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
            if i%50 ==0:
                plt.pause(0.1)
                try:
                    ax.lines.remove(lines[0])
                except Exception:
                    pass
                prediction_value = sess.run(prediction,feed_dict={xs:x_data})
                lines = ax.plot(x_data,prediction_value,'r-',lw=5)
     
     
                print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
     
        plt.ioff()
        plt.show()
    
    

    `
    在交互模式下:

    1、plt.plot(x)或plt.imshow(x)是直接出图像,不需要plt.show()
    2、如果在脚本中使用ion()命令开启了交互模式,没有使用ioff()关闭的话,则图像会一闪而过,并不会常留。要想防止这种情况,需要在plt.show()之前加上ioff()命令。

    在阻塞模式下:

    1、打开一个窗口以后必须关掉才能打开下一个新的窗口。这种情况下,默认是不能像Matlab一样同时开很多窗口进行对比的。
    2、plt.plot(x)或plt.imshow(x)是直接出图像,需要plt.show()后才能显示图像

    相关文章

      网友评论

          本文标题:matplotlib画动态图

          本文链接:https://www.haomeiwen.com/subject/wjefwftx.html