更新Matplotlib图表。

6

我正在尝试更新一个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数据点错误之外,一切都正常。我查看了以下帖子:如何在matplotlib中更新绘图?在matplotlib中更新线条。然而,在这两种情况下,用户仅更新ydata,而我也想更新xdata
1个回答

7
作为典型情况,撰写问题的行为激发了我对之前未曾考虑过的可能性进行研究。x-data正在更新,但是图形范围没有更新。当我将新数据放在图中时,所有数据都超出了范围。解决方案是添加:
ax.relim()
ax.autoscale_view(True,True,True)

以下是与原问题相关的代码,希望对将来需要帮助的其他人有所帮助:

(部分参考)


这里是与原问题相关的代码,希望能对日后的其他人有所帮助:

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接