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中的匿名函数使用简介
Apr 27 Python
利用python发送和接收邮件
Sep 27 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
pycharm 主题theme设置调整仿sublime的方法
May 23 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
Python操作qml对象过程详解
Sep 26 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
基于python爬取有道翻译过程图解
Mar 31 Python
python Django 反向访问器的外键冲突解决
May 20 Python
python模板入门教程之flask Jinja
Apr 11 Python
Python使用mitmproxy工具监控手机 下载手机小视频
Apr 18 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
收音机术语解释
2021/03/01 无线电
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
jquery foreach使用示例
2013/09/12 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
javascript数组排序汇总
2015/07/07 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
python读取文件名称生成list的方法
2018/04/27 Python
python定时关机小脚本
2018/06/20 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
学生的自我鉴定范文
2013/10/24 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
老人院义工活动感想
2015/08/07 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android