更新matplotlib图

时间:2012-10-28 03:35:00

标签: python 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

1 个答案:

答案 0 :(得分:5)

正如典型的情况一样,写一个问题的行为激发了我研究一种我以前没想过的可能性。 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()