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和pygame绘制繁花曲线的方法
Feb 24 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
对pandas中Series的map函数详解
Jul 25 Python
python redis 删除key脚本的实例
Feb 19 Python
python实现AES加密和解密
Mar 27 Python
python里dict变成list实例方法
Jun 26 Python
PyTorch中topk函数的用法详解
Jan 02 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
Python json转字典字符方法实例解析
Apr 13 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
python 如何用map()函数创建多线程任务
Apr 07 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
javascript几个易错点记录
2014/11/26 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
python提示No module named images的解决方法
2014/09/29 Python
Python对象体系深入分析
2014/10/28 Python
python实现计算倒数的方法
2015/07/11 Python
Python中max函数用法实例分析
2015/07/17 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
Linux文件系统类型
2012/02/15 面试题
优秀英语专业毕业生求职信
2013/11/23 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
服务生自我鉴定
2014/01/22 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python