【问题标题】:Updating the positions and colors of pyplot.scatter更新 pyplot.scatter 的位置和颜色
【发布时间】:2014-10-25 00:40:58
【问题描述】:

我已经为此苦苦挣扎了一段时间,但无法让它发挥作用。我正在读取块中的文件并从中散点绘图数据,我想通过在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_arrays.set_offsets 应该更新颜色以及 x 和 y 位置,但我无法弄清楚如何将它们与上面的 x、y、alpha 数据类型一起使用。

(另外,有没有更好的方法来做上图中的 alpha?)

【问题讨论】:

  • @endolith:这里有一个关于实时更新图表的问题:stackoverflow.com/questions/13181118/… 也许这会有所帮助?
  • set_array 在您使用颜色图确定标记颜色时起作用,而不是在您手动设置颜色时起作用。这些函数所做的另一个假设是制造商的数量不会改变 (iirc)。
  • @tcaswell:颜色是从数据中生成的,而不是手动生成的,因此具有不同 alpha 的颜色图可以工作。你能写一个如何使用自定义颜色图和更新散点颜色的例子吗?标记的数量不会改变。
  • @tcaswell:我有点让它工作,但边缘颜色不同。我究竟做错了什么? gist.github.com/endolith/f96d3939ffa5d79c81cc

标签: python matplotlib plot scatter-plot scatter


【解决方案1】:

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

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

这完全符合我的预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多