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中正则表达式的使用详解
Oct 17 Python
Python实现的批量下载RFC文档
Mar 10 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
深入学习Python中的装饰器使用
Jun 20 Python
python中kmeans聚类实现代码
Feb 23 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
在python中使用with打开多个文件的方法
Jan 07 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
深入了解Python在HDA中的应用
Sep 05 Python
pytorch自定义二值化网络层方式
Jan 07 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 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使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
php实现的双向队列类实例
2014/09/24 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
Js的MessageBox
2006/12/03 Javascript
javascript delete 使用示例代码
2010/03/29 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
详解Node.js模板引擎Jade入门
2018/01/19 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
为什么推荐使用JSX开发Vue3
2020/12/28 Vue.js
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
python3 实现调用串口功能
2019/12/26 Python
想学画画?python满足你!
2020/12/24 Python
简历自我评价怎么写好呢?
2014/01/04 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
关于旅游的活动方案
2014/08/15 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
返乡农民工证明
2015/06/24 职场文书
格列佛游记读书笔记
2015/06/30 职场文书