0

我有一个交互式图形,在该图形上逐步绘制,一次一个块。

也就是说,在一个循环中我得到一些采样数据,然后我将它们添加到图中的现有曲线并重新绘制图片。为此,我使用了 get/set_x/ydata 函数。这条线上的东西:

# Get initial data
time = [1, 2, 3, 4, 5]
samples = [0.1, 0.2, 0.3, 0.4, 0.5]
c = plot_curve(time, samples)
# Get new data
time2 = [6, 7, 8]
samp2 = [0.6, 0.7, 0.8]
c.set_xdata(append(c.get_xdata(), time2))
c.set_ydata(append(c.get_ydata(), samp2))

问题是,我还在使用fill_between 填充曲线附近的一些区域(例如曲线和x 轴之间的空间)。目前,我正在以这种方式创建很多小块:

# Filling initial chunk
fill_between(time, samples, [0 for i in time])
# Filling next chunk
fill_between(time[-1] + time2, samples[-1] + samp2, [0 for i in time2] + [0])

(我知道这段代码很臭,但它是为了给出一个想法)。

所以,问题是:有一条曲线,但填充区域为 2(每个数据块一个)。这会在绘图中产生小的伪影,因为每个填充区域都非常靠近下一个区域,它们之间的空间非常小。

有没有办法在填充区域也做这种增量工作?

例如,保留 2 条曲线(一个等于 c.get_ydata() 和一个零)并让 matplotlib 自动填充它们之间的区域可能很好,而不必显式调用命令 - 这样填充的区域将始终与采样点保持同步。

或者,另一种好方法是使用采样点而不是多边形来表示填充区域,以便我可以使用类似于 get/set_x/ydata 的方法更新该区域。

4

1 回答 1

0

一种稍微不那么骇人听闻的方法是

pc = fill_between(time, samples)

(请注意,默认值为 y2 = 0,因此您不需要该列表理解)

然后,当你更新你的身材

time2 = [6, 7, 8]
samp2 = [0.6, 0.7, 0.8]
time_update = append(c.get_xdata(), time2)
samp_update = append(c.get_ydata(), samp2)
c.set_xdata(time_update)
c.set_ydata(samp_update)
pc.remove()
pc = fill_between(time_update, samp_update)

不要每次都创建一个新的更小的区域,只需清除旧区域并为所有数据完全重新创建它。不知道这将如何影响你的速度,但如果它比你现在做的慢,我会感到惊讶。

于 2013-02-06T16:39:38.887 回答