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 Tkinter GUI编程入门介绍
Mar 10 Python
Python中的函数作用域
May 07 Python
python求最大连续子数组的和
Jul 07 Python
python基础知识(一)变量与简单数据类型详解
Apr 17 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
python实现输出一个序列的所有子序列示例
Nov 18 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
Python建造者模式案例运行原理解析
Jun 29 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 Python
如何用python爬取微博热搜数据并保存
Feb 20 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之第一天
2006/10/09 PHP
谈谈PHP语法(3)
2006/10/09 PHP
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
Python中每次处理一个字符的5种方法
2015/05/21 Python
小小聊天室Python代码实现
2016/08/17 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
const和static readonly区别
2013/05/20 面试题
军训生自我鉴定范文
2013/12/27 职场文书
支教自我鉴定
2014/01/18 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
纪律教育月活动总结
2014/08/26 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
团员自我评价范文
2015/03/10 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书