文章目录

  • interactive,ion,ioff
  • draw,show,plot
    • draw
    • show,plot
    • 拓展
import matplotlib.pyplot as plt
import numpy as np

interactive,ion,ioff

先理清一个概念,plot和figure,plot更加细节,绘制,比如绘制一条线,绘制标题,这些都是绘制在figure上的;而figure就只有一个,我们所需要做的就是展示它给用户看。

我们平常都是非交互模式,那么什么是交互模式呢(plt.ion())?就是每plot一下(比如上步绘制线,这步绘制标题),图片自动更新并显示。

我们实践一下:

我们打开python shell(如果安装的是python包,就直接在命令行中输入python;如果安装的是anaconda,就打开anaconda命令行中输入python)


我们可以看到 plt.plot([1,1],[2,3])之后,图像就弹出来了,然后我们不要关闭这个图像,继续输入plt.title(“test”),图像在原来的基础上多了标题。这就是交互式,我们可以理解为动图。

The interactive mode is mainly useful if you build plots from the command line and want to see the effect of each command while you are building the figure.

同理,plt.ioff()就是关闭交互模式。

对了,补充一下, 命令行默认是非交互模式的,如下:

我们可以看到,我们按了回车,然后图片弹了出来,但是如果我们不关闭图片,我们没法继续输入代码,卡住了。这就是block的意思。

In interactive mode:#i第一个例子

newly created figures will be shown immediately;

figures will automatically redraw on change;

pyplot.show will not block by default.

In non-interactive mode:

newly created figures and changes to figures will not be reflected
until explicitly asked to be;

pyplot.show will block by default.

非交互模式下:plt.show()才能显示图像,以前交互模式的时候plt.plot()就会显示图像。而且非交互模式下plt.show()显示了之后,后面的程序就没法运行了,卡住了。

而实际上,Jupyter notebook默认就是交互模式,所以plt.plot()就可以绘制图像,而不一定需要plt.show()。而pycharm不行,其默认是非交互模式,必须plt.show(),否则没有图像显示。不过pycharm强大之处在于,其不会被block住,后面的程序可以继续执行,图片会被pycharm单独保存下来。

另外,还有plt.pause(),暂时没查过有啥用。

draw,show,plot

draw

matplotlib.pyplot.draw:Redraw the current figure.

用在交互式环境下,在非交互式环境中不报错,但是多余。即使是在交互式环境下,其也很少被使用,因为一般不需要重绘,其只会用在逻辑上图片已经改变(例如添加了一些东西或者改变了一些状态)但又没有在显示上(物理上)更新的情况。由于我们使用的大多数改变图片的操作例如plt.title之类的,其本身会自动重绘。

show,plot

matplotlib.pyplot.show:展示所有的图片。你没看错,是所有。plt.figure可以创建一个新的图片。

x=np.arange(3)
# f1=plt.figure()
plt.plot(x,x)#由于没有图片,所以默认会自动创建,此时图片1.
plt.xlabel("x")
# plt.show()
f2=plt.figure()#创建了一个新的图片,而且之后的plot操作基于此。
plt.plot(x,x+1)
plt.xlabel("v")
plt.show()#显示所有图片。


matplotlib.pyplot.plot:这个经常和show搞混,因为用这个不是不用show就能把图画出来吗?那要其有何用?区别在于这个会先缓冲,晚于所有其他输出,最后再画出来所有图像。而show执行命令就开始画。

不过,那种输出展示过的都会让先前的figure对象失去焦点并且是失去活性,相当于这个figure完全清空了。然后下次再次plt是重新新的figure。show也不例外。实验如下:


这两个图片是不一样的,前面两个都是操作在同一个图片上,在输出展示之后,后面又是新的一个图片。

一个问题是,为什么上面示例中的第一段代码

x=np.arange(3)
plt.plot(x,x)
plt.xlabel("x")

不是生成两个图,而会乖乖的都画在一起。因为我发现绘图时晚于所有其他输出的,也就是说执行完全部之后,该输出的输出,然后才会绘制图像,这个时候,由于没有绘制图像,所以图一没有失去活性,所以第三句代码已经添加到图上去了,所以一共是一张图。看如下:

x=np.arange(3)
plt.plot(x,x)
plt.xlabel("x")
print("he")
plt.title("haha")
print("hs")#输出在图前面。


即一次执行如果没有创建多张图,则只会输出一张图,且在最后才输出展示。这个是jupyter的特点好像,而且按照道理应该输出是动态的才对(交互环境嘛!一条代码变换一次图像)。但是Jupyter好像做不到,其一定会留在最后一起,然后再显示图像。

不知道大家有没有试过将代码作为.py文件使用下载的python语言直接点击运行,看是不是动态变化的(可以配合time.sleep())。

拓展

上面有好几次都创建了图片,我们又该如何切换呢?

x=np.arange(3)
f1=plt.figure(1)
plt.plot(x,x)
plt.xlabel("x")
# plt.show(),不能使用show,否则会释放figure1。
f2=plt.figure(2)#创建了一个新的图片,而且之后的plot操作基于此。
plt.plot(x,x+1)
plt.xlabel("v")
# plt.show()#显示所有图片。
plt.figure(1)#又切换到了图片1.
plt.title("hello")

(深入理解)matplotlib的交互模式(block,interactive,ion,ioff,draw,show,plot等的区别)相关推荐

  1. matplotlib交互模式

    Matpotlib交互模式 在运行python程序时有时候需要生成以下的 动态图模式 来显示程序运行的结果 此时需要使用matplotlib的 交互模式 ,在Ipython中时默认使用交互模式的. 在 ...

  2. matplotlib交互模式与pycharm单独Figure设置

    matplotlib交互模式与pacharm单独Figure设置 Matpotlib交互模式 在运行python程序时有时候需要生成以下的 动态图模式 来显示程序运行的结果 此时需要使用matplot ...

  3. Python+Selenium学习笔记5 - python官网的tutorial - 交互模式下的操作

    这篇笔记主要是从Python官网的Tutorial上截取下来,再加上个人理解 1. 在交互模式下,下划线'_'还可以表示上一步的计算结果 2.引号转义问题. 从下图总结的规律是,字符串里的引号如果和引 ...

  4. python交互模式切换_python如何进入交互模式

    安装完Python,在命令行输入"python"之后,如果成功,会得到类似于下面的窗口: 可以看到,结尾有3个>符号(>>>).>>>被叫 ...

  5. matplotlib show, ion, ioff, clf, pause的作用

    matplotlib show, ion, ioff, clf, pause的作用 前言 plt.ion(), plt.ioff() plt.clf() plt.pause() 例1:不阻塞的画图 例 ...

  6. python matplotlib.pyplot plt.ioff()函数(关闭交互模式用于阻塞程序,不让图片关闭)

    感觉ioff()函数就是个全局设置的东东,启动它,则图形绘制到最后窗口不会关闭(检测到有新的绘制就会更新窗口内容),否则因为开启了ion()交互模式,窗口绘制完就默认关闭 def ioff():&qu ...

  7. Matplotlib交互模式画图动态刷新延迟等问题

    Matplotlib交互模式画图动态刷新延迟等问题 一.引子 二.问题 三.测试分析 四.解决方案 一.引子   最近在实验室优化基于 EPICS 协议的 Python 控制程序,其中,硅漂移探测器设 ...

  8. Python绘图之matplotlib基础教程:matplotlib库图表绘制中常规设置大全(交互模式、清除原有图像、设置横坐标显示文字/旋转角度、添加图例、绘图布局自动调整、图像显示、图像暂停)

    Python绘图之matplotlib基础教程:matplotlib库图表绘制中常规设置大全(交互模式.清除原有图像.设置横坐标显示文字/旋转角度.添加图例.绘图布局自动调整.图像显示.图像暂停) 目 ...

  9. 开发函数计算的正确姿势——使用交互模式安装依赖

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

最新文章

  1. idea CRLF LF 编码问题,解决保存时自动更改换行符
  2. Laravel以及Laravel-admin的命令行使用总结
  3. C++ 中export 关键字的尴尬处境
  4. android 好看的输入法,Android 手机上最好的输入法是哪种
  5. java密码查询回显和修改流程_[求助]数据库信息如何回显在我的程序界面中
  6. Vue v-on v-model 组合使用
  7. Android Launcher3 开启旋转后有部分任务在旋转后会显示出来
  8. Composite_组合模式_PHP语言描述
  9. 拓端tecdat|R语言使用Profviz进行Metropolis-in-Gibbs抽样和运行时间分析
  10. 流媒体基本要点简述:如何在H264数据中获取PTS?
  11. 详谈APP移动端 - 加壳与脱壳
  12. 基于微信小程序的毕业设计题目(26)php视频电影播放小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  13. android 渠道配置manifest,Android studio 配置多渠道打包配置
  14. 图形学-着色(Blinn-Phong模型)
  15. 安卓bmi项目_bmi计算器
  16. 分布式系统论文精读2:GFS
  17. react native ScrollView实现滑动锚定,滑动到指定位置
  18. P1823 [COI2007] Patrik 音乐会的等待(单调栈)
  19. windows下JDK的安装(一):安装路径的选择
  20. 手机联系人头像包_动漫壁纸 | 星游记动漫手机全面屏壁纸

热门文章

  1. Python 工匠:在边界处思考
  2. 美团外卖美食知识图谱的迭代及应用
  3. 独家 | 关于Facebook数据泄露你需要知道的事
  4. 大数据技术下面向企业需求的高校应用型人才培养课程体系设计
  5. 独家 | 从零开始用python搭建推荐引擎(附代码)
  6. 独家 | 初学者的问题:在神经网络中应使用多少隐藏层/神经元?(附实例)
  7. 赠票 | 深度强化学习的理论、算法与应用专题探索班
  8. 创业公司备战“11.11”创新行为大赏
  9. 常识知识确能被捕获,西湖大学博士探究BERT如何做常识问答
  10. Multi-Task Learning的几篇综述文章