我正在尝试更新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()
Run Code Online (Sandbox Code Playgroud)
第一次通过循环,图表显示正常.第二次循环,我的绘图上的所有数据都消失了 - 如果我不包括该lines2d.set_xdata
行(除了x数据点当然是错误的)之外,一切正常.我查看了以下帖子:
和
但是,在这两种情况下,用户只更新了ydata
,我也想更新xdata
.
就像典型的情况一样,写一个问题的行为激发了我去研究一种我以前没想过的可能性.在X-数据被更新,但情节的范围都没有.当我在情节上放置新数据时,它全都超出了范围.解决方案是添加:
ax.relim()
ax.autoscale_view(True,True,True)
Run Code Online (Sandbox Code Playgroud)
这是原始问题的上下文中的代码,希望有一天它会对其他人有所帮助:
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()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3795 次 |
最近记录: |