Python 更新pyplot.scatter的位置和颜色

Python 更新pyplot.scatter的位置和颜色,python,matplotlib,plot,scatter-plot,scatter,Python,Matplotlib,Plot,Scatter Plot,Scatter,我已经为此挣扎了一段时间,无法让它工作。我正在分块读取文件并从中散点打印数据,我希望通过更新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, ed

我已经为此挣扎了一段时间,无法让它工作。我正在分块读取文件并从中散点打印数据,我希望通过更新
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)

但是如何在不反复调用
s.remove()
scatter()
的情况下更新绘图?完全非直观命名的
s.set_数组
s.set_偏移量
应该更新颜色和x、y位置,但我不知道如何将它们与上面的x、y、alpha数据类型一起使用


(还有,有没有更好的方法在上面的图中绘制alpha?

我找到的解决方案包括使用Normalize根据相关数据制作一个归一化颜色列表,将其映射到可缩放的可缩放列表,并使用它设置动画每一帧的面部颜色和c限制。通过scat,散点图和speedsList的手柄提供颜色数据:

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

这正是我所期望的。

@endolith:这里有一个关于实时更新图形的问题:这可能会有帮助吗?
set\u array
在使用颜色贴图确定标记颜色时有效,而不是在手动设置颜色时有效。这些函数的另一个假设是生成者的数量不变(iirc)。@tcaswell:颜色是从数据中生成的,而不是手动生成的,因此具有不同alpha的颜色贴图可以工作。你能写一个如何使用自定义颜色映射和更新散射颜色的例子吗?标记的数量不会改变。@tcaswell:我有点让它起作用了,但是边缘颜色是不同的。我做错了什么?