学习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()后才能显示图像js

java plt_matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解相关推荐

  1. python可以画动态图吗_matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解

    学习python的道路是漫长的,今天又遇到一个问题,所以想写下来自己的理解方便以后查看. 在使用matplotlib的过程中,常常会需要画很多图,但是好像并不能同时展示许多图.这是因为python可视 ...

  2. 从Java程序员进阶到架构师,6大核心技能要领详解

    " java架构师技能将分为如下6大环节:数据结构和算法,Java高级特性,Java web核心,数据库,Java框架与必备工具,系统架构设计. 希望能真正帮助到从程序员进阶到架构师之路的朋 ...

  3. 面试-Java【之】(revers)递归实现字符串倒序排列(详解)

    面试-Java[之](revers)递归实现字符串倒序排列(详解) 实现源码详解 <目录:Java-JDBC学习> <幕> 实现源码详解 public class Test { ...

  4. java poi 模板填数据库,java使用POI读取excel模版并向固定表格里填写数据详解

    java使用POI读取excel模版并向固定表格里填写数据详解:public class ExportExcelDemo { private HSSFWorkbook workbook = null; ...

  5. java中多线程之CAS(compareAndSet),Unsafe类大白话详解.

    java中多线程之CAS(compareAndSet),Unsafe类大白话详解 什么是CAS CAS原理 Unsafe类:     什么是CAS 比较并交换 在学习CAS之前,我们先了解一下JMM. ...

  6. java ear war_基于Java的打包jar、war、ear包的作用与区别详解

    基于Java的打包jar.war.ear包的作用与区别详解 以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希 ...

  7. 用python画动图_Python使用matplotlib画动态图

    机器学习需要使用python实现相应的算法,因此学习了Matplotlib中的画图. 当然为了能显示机器学习中每次迭代的效果与收敛速度,需要画出动态图形. 下面给出两个例子,分别可以画出动态条形图和动 ...

  8. python画动态图-python画动态图

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 而漂漂亮亮的可视化是完成这一任务的绝佳工具. 本文将介绍 5 种非传统的 ...

  9. python画动态图代码-Python使用matplotlib画动态图

    import numpy as np import matplotlib.pyplot as plt import math from scipy.interpolate import make_in ...

最新文章

  1. 用VS2005打开方案出现“此安装不支持该项目类型”
  2. 华为python工程师工资-华为工程师对Python编程的看法
  3. 汇编语言随笔(10)-内中断及实验12(返回到dos的中断处理程序)
  4. 【MFC】Windows样式
  5. 【BZOJ 3229】 3229: [Sdoi2008]石子合并 (GarsiaWachs算法)
  6. 小米 华为都要造车?.NET高薪潮来了!(附招聘链接)
  7. mysql text 查询速度_数据库学习之让索引加快查询速度(四)
  8. mongodb 备份压缩_MongoDB-备份和恢复
  9. 使用框架开发的优势和劣势
  10. anaconda安装——添加镜像源
  11. qt与duilib对比
  12. 微信跳转手机默认浏览器实现微信扫一扫功能扫码直接下载apk
  13. 处理符号(处理微信昵称特殊符号)
  14. Pytorch-IMDB电影评论情感分析
  15. Java获取国家节假日规定休息日期
  16. python3魔法方法_Python3 魔法方法详解
  17. 自动驾驶寻找「商业闭环」
  18. 巴卡斯杯 中国大学生程序设计竞赛 - 女生专场(重现)解题思路
  19. 服务器怎么安装php文档,云服务器php怎么安装
  20. 计算机网络学术期刊,中国计算机学会推荐的计算机网络方向国际学术会议与国际学术期刊...

热门文章

  1. Spring 核心容器类BeanDefinitionReader
  2. 语义化版本命名通行规则
  3. Redis 为什么是单线程的?
  4. 字符流复制Java文件改进版
  5. SpringMVC拦截器-快速入门(应用)
  6. 异常规范之异常的概念
  7. SpringBoot编写HelloWorld-new
  8. 测试串行回收与堆初始值有关系01
  9. Mockito详细介绍
  10. 路径中斜杠/、点斜杠./、点点斜杠../的区别