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实现下载网易云音乐的高清MV
Mar 16 Python
django实现登录时候输入密码错误5次锁定用户十分钟
Nov 05 Python
python 脚本生成随机 字母 + 数字密码功能
May 26 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
python实现停车管理系统
Nov 30 Python
python实现任意位置文件分割的实例
Dec 14 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
Python tkinter和exe打包的方法
Feb 05 Python
Python 如何在字符串中插入变量
Aug 01 Python
python 写一个文件分发小程序
Dec 05 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技术开发微信公众平台
2015/07/22 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
[01:16:50]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第一场 3月7日
2021/03/11 DOTA
Python返回真假值(True or False)小技巧
2015/04/10 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
生产经理的自我评价分享
2013/11/07 职场文书
精彩的推荐信范文
2013/11/26 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
保安辞职信范文
2015/02/28 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书