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 文件与目录操作
Dec 24 Python
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
Python实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
Python中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
使用python将图片格式转换为ico格式的示例
Oct 22 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
Python生成九宫格图片的示例代码
Apr 14 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
May 21 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同时支持GIF、png、JPEG
2006/10/09 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
js中typeof的用法汇总
2013/12/12 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Python的一些用法分享
2012/10/07 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
浅析python标准库中的glob
2020/03/13 Python
django model object序列化实例
2020/03/13 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
精彩的演讲稿开头
2014/05/08 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
Pandas自定义选项option设置
2021/07/25 Python
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL