2012-10-28 62 views
4

我想如下更新matplotlib阴谋:更新matplotlib阴谋

import matplotlib.pyplot as plt 
import matplotlib.dates as mdate 
import numpy as np 

plt.ion() 

fig = plt.figure() 
ax = fig.add_subplot(111) 

for i,(_,_,idx) in enumerate(local_minima): 
    dat = dst_data[idx-24:idx+25] 
    dates,values = zip(*dat) 
    if i == 0: 
     assert(len(dates) == len(values)) 
     lines2d, = ax.plot_date(mdate.date2num(dates), np.array(values), linestyle='-') 
    else: 
     assert(len(dates) == len(values)) 
     lines2d.set_ydata(np.array(values)) 
     lines2d.set_xdata(mdate.date2num(dates)) #This line causes problems. 

     fig.canvas.draw() 
    raw_input() 

第一次循环,该图显示就好了。通过循环第二次,我的绘图中的所有数据都消失了 - 如果我不包含lines2d.set_xdata行(除了x数据点当然是错误的),一切正常。我看着下面的帖子:

How to update a plot in matplotlib?

Update Lines in matplotlib

然而,在这两种情况下,用户只更新ydata,我想更新xdata为好。

回答

4

就像典型的情况一样,写一个问题的行为激发了我去研究以前没有想到的可能性。 x数据更新为,但绘图范围不是。当我把新的数据放在剧情上时,这一切都超出了范围。解决的办法是补充:

ax.relim() 
ax.autoscale_view(True,True,True) 

(partial reference)


下面是原题的上下文有关的代码,希望这将有助于别人一天:

import matplotlib.pyplot as plt 
import matplotlib.dates as mdate 
import numpy as np 

plt.ion() 

fig = plt.figure() 
ax = fig.add_subplot(111) 

for i,(_,_,idx) in enumerate(local_minima): 
    dat = dst_data[idx-24:idx+25] 
    dates,values = zip(*dat) 
    if i == 0: 
     assert(len(dates) == len(values)) 
     lines2d, = ax.plot_date(mdate.date2num(dates), np.array(values), linestyle='-') 
    else: 
     assert(len(dates) == len(values)) 
     lines2d.set_ydata(np.array(values)) 
     lines2d.set_xdata(mdate.date2num(dates)) #This line causes problems. 
     ax.relim() 
     ax.autoscale_view(True,True,True) 
     fig.canvas.draw() 
    raw_input()