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定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
更新修改后的Python模块方法
Mar 03 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 Python
python requests指定出口ip的例子
Jul 25 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
浅析Python 责任链设计模式
Sep 11 Python
使用python将微信image下.dat文件解密为.png的方法
Nov 30 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
Python包管理工具pip的15 个使用小技巧
May 17 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字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
php+mysql实现无限级分类
2015/11/11 PHP
php短信接口代码
2016/05/13 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
document.getElementById介绍
2011/09/13 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
理解javascript封装
2016/02/23 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
js实现列表按字母排序
2020/08/11 Javascript
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
python基于opencv检测程序运行效率
2019/12/28 Python
python super用法及原理详解
2020/01/20 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
应届本科毕业生求职信
2014/07/23 职场文书
加强作风建设演讲稿
2014/10/24 职场文书
2014年化验员工作总结
2014/11/18 职场文书