在Ubuntu
系统上进行如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ 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 |
之后执行如下测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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)
被调用的时候才会刷新界面。
所以只需要上面的代码修改成如下即可在不同版本之间兼容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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)
的调用。
貌似调用fig.canvas.flush_events()
更合适?
查看matplotlib
的版本使用如下代码:
1 2 |
import matplotlib as mpl print mpl.__version__ |
感谢博主,解决了我动态画图显示不正常的问题!