gpt4 book ai didi

python - 循环更新帧时的 LineCollection 动画

转载 作者:行者123 更新时间:2023-11-28 17:44:33 24 4
gpt4 key购买 nike

下面的代码应该做同样的事情 here在动画期间更新线条颜色的位置。但是,颜色没有更新。这段代码的哪一部分是错误的?

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.collections import LineCollection
import matplotlib.animation as animation

lines = []
for i in range(10):
for j in range(10):
lines.append([(0, i), (1, j)])

fig, ax = plt.subplots()
colors = np.random.random(len(lines))
col = LineCollection(lines, array=colors, cmap=plt.cm.gray)
ax.add_collection(col)
ax.autoscale()

ims = []
for i in range(100):
colors = np.random.random(len(lines))
col.set_array(colors)
ims.append([ax.add_collection(col)])
ani = animation.ArtistAnimation(fig, ims, interval=200, blit=True,repeat_delay=10000)
plt.show()

我从上面的代码得到的输出如下 code output

最佳答案

您需要在线条之后绘制更改后的艺术家(您的LineCollection)

col.set_array(colors)

您需要这样做,因为 LineCollection 首先添加到带有线的轴

ax.add_collection(col)

然后在循环中改变它。然后您必须更新图窗。最简单的方法是在该行之前调用 plt.draw()

im=ax.add_collection(col)

然而,这会重新绘制所有内容,并减慢动画的速度。解决方案是先在循环之前调用 plt.draw() 绘制所有其余部分,然后调用 ax.draw_artist(col)< 仅更新更改的艺术家。生成的代码如下所示

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.collections import LineCollection
import matplotlib.animation as animation

lines=[]
for i in range(10):
for j in range(10):
lines.append([(0, i), (1, j)])

fig, ax = plt.subplots()
colors = np.random.random(len(lines))
col = LineCollection(lines, array=colors, cmap=plt.cm.gray)
ax.add_collection(col)
ax.autoscale()


ims=[]
plt.draw()
for i in range(100):
col = LineCollection(lines,cmap=plt.cm.gray)
colors = np.random.random(len(lines))
col.set_array(colors)
ax.draw_artist(col)
im=ax.add_collection(col)
ims.append([im])
ani = animation.ArtistAnimation(fig, ims, interval=25, blit=True,repeat_delay=10000)
plt.show()

使用 FuncAnimation() 做同样的事情不那么棘手,参见示例 here ,但您说您出于某些原因不想使用它。

关于python - 循环更新帧时的 LineCollection 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com