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字符串匹配算法KMP实例
Jul 18 Python
python绘制双柱形图代码实例
Dec 14 Python
使用Python对微信好友进行数据分析
Jun 27 Python
Python对切片命名的实现方法
Oct 16 Python
python内置数据类型之列表操作
Nov 12 Python
python虚拟环境迁移方法
Jan 03 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
pandas取出重复数据的方法
Jul 04 Python
Python partial函数原理及用法解析
Dec 11 Python
tensorflow mnist 数据加载实现并画图效果
Feb 05 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 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 in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
php事务处理实例详解
2014/07/11 PHP
Mootools 1.2教程 类(一)
2009/09/15 Javascript
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
利用python写个下载teahour音频的小脚本
2017/05/08 Python
Python爬取成语接龙类网站
2018/10/19 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
2014年国庆标语
2014/06/30 职场文书
先进单位申报材料
2014/12/25 职场文书
班主任自我评价范文
2015/03/11 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python