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使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
Python下的twisted框架入门指引
Apr 15 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
Python中装饰器高级用法详解
Dec 25 Python
Python中 map()函数的用法详解
Jul 10 Python
Python closure闭包解释及其注意点详解
Aug 28 Python
Python列表删除元素del、pop()和remove()的区别小结
Sep 11 Python
python单例模式原理与创建方法实例分析
Oct 26 Python
python中sys模块是做什么用的
Aug 16 Python
Python使用Selenium模拟浏览器自动操作功能
Sep 08 Python
python字符串的多行输出的实例详解
Jun 08 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实现天干地支计算器示例
2014/03/14 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
js DOM的学习笔记
2011/12/22 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
JavaScript错误处理
2015/02/03 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
浅谈javascript中的Function和Arguments
2016/08/30 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
三个儿子教学反思
2014/02/03 职场文书
医师定期考核实施方案
2014/05/07 职场文书
音乐课外活动总结
2015/05/09 职场文书
电影雷锋观后感
2015/06/10 职场文书
迎新年主持词
2015/07/06 职场文书
工作感言一句话
2015/08/01 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python