更新 pyplot.scatter 的位置和颜色

end*_*ith 5 python plot scatter matplotlib scatter-plot

我已经为此苦苦挣扎了一段时间,但无法让它发挥作用。我正在读取一个文件块并从中绘制散点图数据,我想通过更新for循环中每个块的散点图来“动画”它(并使其适应实时数据流)。

所以像这个丑陋的例子一样适用于单个情节:

x = [1, 2, 3, 4]
y = [4, 3, 2, 1]
alpha = [0.2, 0.3, 0.8, 1.0]
c = np.asarray([(0, 0, 1, a) for a in alpha])
s = scatter(x, y, marker='o', color=c, edgecolors=c)
Run Code Online (Sandbox Code Playgroud)

上面的情节

但我怎么更新,而无需调用的情节s.remove()scatter()反复?完全不直观的命名s.set_array并且s.set_offsets应该更新颜色以及 x 和 y 位置,但我无法弄清楚如何将它们与我上面的 x、y、alpha 数据类型一起使用。

(另外,有没有更好的方法可以在上图中进行 alpha 计算?)

Mag*_*Man 5

我为此找到的解决方案涉及使用 Normalize 根据相关数据创建标准化颜色列表,将其映射到 ScalarMappable,并使用它来设置动画每帧的面部颜色和 c 限制。使用 scat 散点图的句柄和 speedList 提供颜色数据:

n = mpl.colors.Normalize(vmin = min(speedsList), vmax = max(speedsList))
m = mpl.cm.ScalarMappable(norm=n, cmap=mpl.cm.afmhot)
scat.set_facecolor(m.to_rgba(speedsList))
scat.set_clim(vmin=min(speedsList), vmax=max(speedsList))
Run Code Online (Sandbox Code Playgroud)

这正是我所期望的。