不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决


Posted in Python onSeptember 24, 2017

前言

本文主要给大家介绍了关于不同版本中Python matplotlib.pyplot.draw()界面绘制异常的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

在 Ubuntu系统上进行如下配置:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python-dev
$ sudo apt-get install python-pip
$ sudo pip install --upgrade pip
$ sudo pip install --upgrade urllib3
$ sudo pip install numpy
$ sudo pip install matplotlib

之后执行如下测试代码:

import sys
import numpy as np
import matplotlib.pyplot as plt
 
plt.ion()
(fig, axis) = plt.subplots()
bar_plot = axis.barh(0, 8,linewidth = 0)
bar_plot.color= '#ffff00'
for i in range(20):
 axis.set_xlim(xmax = max(i + 1, 10))
 plt.draw()
 
if sys.version_info < (3, 0):
 raw_input("Press Enter to continue...")
else:
 input("Press Enter to continue...")

上面的测试代码在 Ubuntu 14.04.5版本上是可以正常执行的,对应的 matplotlib的版本是 matplotlib 1.3.1,但是放到 Ubuntu 16.04.2系统上则是无法正常显示的,对应的 matplotlib的版本是 matplotlib 1.5.1。

造成这个问题的原因在于 matplotlib.pyplot.draw() ,这个函数行为的改变,早期这个函数是同步更新界面的,后来的版本却变成了空闲异步更新界面,只有当 matplotlib.pyplot.pause(interval)被调用的时候才会刷新界面。

所以只需要上面的代码修改成如下即可在不同版本之间兼容:

import sys
import numpy as np
import matplotlib.pyplot as plt
 
plt.ion()
(fig, axis) = plt.subplots()
bar_plot = axis.barh(0, 8,linewidth = 0)
bar_plot.color= '#ffff00'
for i in range(20):
 axis.set_xlim(xmax = max(i + 1, 10))
 plt.draw()
 plt.pause(0.00001)
 
if sys.version_info < (3, 0):
 raw_input("Press Enter to continue...")
else:
 input("Press Enter to continue...")

注意:我们在 matplotlib.pyplot.draw()调用后面增加了 matplotlib.pyplot.pause(interval)的调用。

查看 matplotlib的版本使用如下代码:

import matplotlib as mpl
print mpl.__version__

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

参考链接

  • real-time plotting in while loop with matplotlib
  • matplotlib Troubleshooting
  • How to know the version of installed pylab?
Python 相关文章推荐
python调用shell的方法
Nov 20 Python
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
Python中的__new__与__init__魔术方法理解笔记
Nov 08 Python
将Python代码打包为jar软件的简单方法
Aug 04 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
利用 python 对目录下的文件进行过滤删除
Dec 27 Python
python flask中静态文件的管理方法
Mar 20 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
python中id函数运行方式
Jul 03 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 Python
Django如何实现内容缓存示例详解
Sep 24 #Python
Django查询数据库的性能优化示例代码
Sep 24 #Python
python学习教程之使用py2exe打包
Sep 24 #Python
python数据结构之列表和元组的详解
Sep 23 #Python
Python字符串和字典相关操作的实例详解
Sep 23 #Python
使用Turtle画正螺旋线的方法
Sep 22 #Python
详谈python read readline readlines的区别
Sep 22 #Python
You might like
也谈 PHP 和 MYSQL
2006/10/09 PHP
PHP异常处理Exception类
2015/12/11 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
浅谈Koa服务限流方法实践
2017/10/23 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
Python去除字符串两端空格的方法
2015/05/21 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
Django数据库操作之save与update的使用
2020/04/01 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
工作说明书范文
2014/05/07 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
面试感谢信范文
2015/01/22 职场文书
党员转正申请报告
2015/05/15 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
争做文明公民倡议书
2019/06/24 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript