不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
前言
本文主要给大家介绍了关于不同版本中Pythonmatplotlib.pyplot.draw()界面绘制异常的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
在Ubuntu系统上进行如下配置:
$sudoapt-getupdate $sudoapt-getupgrade $sudoapt-getinstallpython-dev $sudoapt-getinstallpython-pip $sudopipinstall--upgradepip $sudopipinstall--upgradeurllib3 $sudopipinstallnumpy $sudopipinstallmatplotlib
之后执行如下测试代码:
importsys importnumpyasnp importmatplotlib.pyplotasplt plt.ion() (fig,axis)=plt.subplots() bar_plot=axis.barh(0,8,linewidth=0) bar_plot.color='#ffff00' foriinrange(20): axis.set_xlim(xmax=max(i+1,10)) plt.draw() ifsys.version_info<(3,0): raw_input("PressEntertocontinue...") else: input("PressEntertocontinue...")
上面的测试代码在Ubuntu14.04.5版本上是可以正常执行的,对应的matplotlib的版本是matplotlib1.3.1,但是放到Ubuntu16.04.2系统上则是无法正常显示的,对应的matplotlib的版本是matplotlib1.5.1。
造成这个问题的原因在于matplotlib.pyplot.draw(),这个函数行为的改变,早期这个函数是同步更新界面的,后来的版本却变成了空闲异步更新界面,只有当matplotlib.pyplot.pause(interval)被调用的时候才会刷新界面。
所以只需要上面的代码修改成如下即可在不同版本之间兼容:
importsys importnumpyasnp importmatplotlib.pyplotasplt plt.ion() (fig,axis)=plt.subplots() bar_plot=axis.barh(0,8,linewidth=0) bar_plot.color='#ffff00' foriinrange(20): axis.set_xlim(xmax=max(i+1,10)) plt.draw() plt.pause(0.00001) ifsys.version_info<(3,0): raw_input("PressEntertocontinue...") else: input("PressEntertocontinue...")
注意:我们在matplotlib.pyplot.draw()调用后面增加了matplotlib.pyplot.pause(interval)的调用。
查看matplotlib的版本使用如下代码:
importmatplotlibasmpl printmpl.__version__
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
参考链接
- real-timeplottinginwhileloopwithmatplotlib
- matplotlibTroubleshooting
- Howtoknowtheversionofinstalledpylab?