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装饰器使用实例:验证参数合法性
Jun 24 Python
Python中模块string.py详解
Mar 12 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
微信跳一跳自动运行python脚本
Jan 08 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
pyQT5 实现窗体之间传值的示例
Jun 20 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
基于Python绘制美观动态圆环图、饼图
Jun 03 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
用Python提取PDF表格的方法
Apr 11 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
基于php-fpm 参数的深入理解
2013/06/03 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
Django app配置多个数据库代码实例
2019/12/17 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
指针和引用有什么区别
2013/01/13 面试题
你懂得怎么写自荐信吗?
2013/12/27 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL