Я рисую некоторые данные в виде точечных диаграмм, которые накладываются на изображение. Я хотел бы сделать анимацию этого, рисуя одну точку рассеяния за раз. Это код, который у меня сейчас есть, используя и редактируя ответ здесь:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
x = random.sample(range(0, 287), 20)
y = random.sample(range(0, 380), 20)
size = [20 for x in range(20)]
colors = ["r" for x in range(20)]
cm = plt.get_cmap('jet')
fig = plt.figure(figsize=(18,9))
graph = plt.scatter([], [],marker='+')
url = 'https://raw.githubusercontent.com/kornelski/pngquant/master/test/img/test.png'
im = plt.imread(url)
def animate(i):
implot = plt.imshow(im)
graph.set_offsets(np.vstack((x[:i+1], y[:i+1])).T)
graph.set_sizes(size[:i])
graph.set_facecolors(colors[:i+1])
return graph
ani = FuncAnimation(fig, animate, repeat=False, interval=0.1)
plt.show()
Есть две вещи, с которыми я хотел бы помочь.
- Я хотел бы, чтобы цвет моей диаграммы рассеяния менялся в зависимости от третьей переменной, то есть использовал
cmap
. Однако set_facecolors не принимает такой аргумент. - Когда я пытаюсь сохранить свою анимацию с помощью
ani.save('files/animation.gif',writer='imagemagick', fps=60)
, мой блокнот Jupyter падает.
Кто-нибудь может мне помочь?