2013-09-30 294 views
1

here的Mac OSX交互式绘图我发现这个代码:蟒蛇2.7使用matplotlib不工作

import random 
from matplotlib import pyplot as plt 
import numpy as np 

plt.ion() # interactive mode 
ydata = [0] * 50 

# make plot 
ax1 = plt.axes() 
line, = plt.plot(ydata) 
plt.ylim([0, 100]) # set the y-range 

while True: 
    randint = int(random.random() * 100) 
    ymin = float(min(ydata)) - 10 
    ymax = float(max(ydata)) + 10 
    plt.ylim([ymin,ymax]) 
    ydata.append(randint) 
    del ydata[0] 
    line.set_xdata(np.arange(len(ydata))) 
    line.set_ydata(ydata) # update data 
    plt.draw() # update plot 

我收到弹出一个绘图窗口,但似乎没有数据没有东西重绘......任何想法是什么我做错了?

+0

在Mac 10.6.8上使用python3.3和python2.7,matplotlib 1.3.0,numpy 1.7.1一切正常。你有最新的软件包吗?如果你使用另一个后端,会发生什么 - 如果我插入'import matplotlib; matplotlib.use('Qt4Agg')'那么也没有重新绘制。 [您可能需要另一个后端](http://stackoverflow.com/questions/5091993/list-of-all-available-matplotlib-backends)?! –

+1

'matplotlib.get_backend()'返回什么?尝试在循环中添加一个'plt.pause(.1)'。 – tacaswell

+0

我的后端是''WXAgg' - 我不知道这是好还是坏。和暂停似乎工作! – lollercoaster

回答

5

您遇到的问题是由于gui mainloops的工作方式。当您将任何情况下调用draw事件添加到主循环要处理的事件队列中时。如果您尽可能快地添加它们,循环永远不会清除它的队列,并且实际绘制到屏幕上。

添加plt.pause(.1)将暂停环路,并允许主循环(在被拟人化的风险)“抓住它的呼吸”,并更新屏幕上的小窗口

相关: