matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解


Posted in Python onJanuary 05, 2021

学习python的道路是漫长的,今天又遇到一个问题,所以想写下来自己的理解方便以后查看。

在使用matplotlib的过程中,常常会需要画很多图,但是好像并不能同时展示许多图。这是因为python可视化库matplotlib的显示模式默认为阻塞(block)模式。什么是阻塞模式那?我的理解就是在plt.show()之后,程序会暂停到那儿,并不会继续执行下去。如果需要继续执行程序,就要关闭图片。那如何展示动态图或多个窗口呢?这就要使用plt.ion()这个函数,使matplotlib的显示模式转换为交互(interactive)模式。即使在脚本中遇到plt.show(),代码还是会继续执行。下面这段代码是展示两个不同的窗口:

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

上面这段代码执行之后就会看到一条曲线在动态的拟合数据,直到训练结束。

下面就来讲讲matplotlib这两种模式具体的区别

在交互模式下:

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 画动态图以及plt.ion()和plt.ioff()的使用详解的文章就介绍到这了,更多相关matplotlib  plt.ion() plt.ioff()内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python中操作字典之fromkeys()方法的使用
May 21 Python
详解字典树Trie结构及其Python代码实现
Jun 03 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
Python简单生成8位随机密码的方法
May 24 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 Python
Python OS模块实例详解
Apr 15 Python
Python3内置模块之json编解码方法小结【推荐】
Dec 09 Python
详解Python3中setuptools、Pip安装教程
Jun 18 Python
python实现微信自动回复机器人功能
Jul 11 Python
python:动态路由的Flask程序代码
Nov 22 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 #Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 #Python
Python读取ini配置文件传参的简单示例
Jan 05 #Python
matplotlib实现数据实时刷新的示例代码
Jan 05 #Python
Matplotlib配色之Colormap详解
Jan 05 #Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
Jan 05 #Python
python实现文件+参数发送request的实例代码
Jan 05 #Python
You might like
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
pymssql ntext字段调用问题解决方法
2008/12/17 Python
python 合并文件的具体实例
2013/08/08 Python
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
对numpy中shape的深入理解
2018/06/15 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
python中class的定义及使用教程
2019/09/18 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
遇到的Mysql的面试题
2014/06/29 面试题
写给保洁员表扬信
2014/01/08 职场文书
绩效工资分配方案
2014/01/18 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
委托书的格式
2014/08/01 职场文书
交通事故协议书范文
2014/10/23 职场文书
第一节英语课开场白
2015/06/01 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
关于JavaScript回调函数的深入理解
2021/06/27 Javascript
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang