Я хочу показать цифру, которая вычисляется в цикле, скажем, с 5 итерациями.
Это код, который я написал
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1,100)
y = np.linspace(0,1,100)
xx,yy = np.meshgrid(x,y)
for n in range(5):
a = np.sin(xx-2*n)
plt.imshow(a,interpolation='bilinear')
plt.show()
С помощью этого кода я получил 5 цифр. Как заставить его работать на одном рисунке для каждой итерации? Я использовал Google Collab, можно ли сделать так, чтобы результат (рисунок) открывался в новом окне (отстыковывался), как в Matlab?
В matplotlib для этого есть несколько классов анимации: matplotlib.org/stable/users/explain/animations/animations.html
Я рассматриваю некоторые варианты анимации для Jupyter, пользовательской версией которого является Colab, здесь. Я не знаю, каким версиям Jupyter они соответствуют, потому что это первый шаг, поскольку в зависимости от версии требуется специальная настройка. Текст на этой странице направляет вас к опциям.






Вы можете имитировать анимацию , используя display /clear_output из ipython (используется Colab):
import time
import matplotlib.pyplot as plt
import numpy as np
from IPython.display import clear_output, display
x = np.linspace(0, 1, 100)
y = np.linspace(0, 1, 100)
xx, yy = np.meshgrid(x, y)
# you could initialize a subplots or whatever here..
for n in range(5):
a = np.sin(xx - 2 * n)
plt.imshow(a, interpolation = "bilinear")
# this one is optional (to verbose my output)
plt.gca().set_title(f"Plot n°{n+1}", fontweight = "bold")
# added these three lines
display(plt.gcf())
clear_output(wait=True)
time.sleep(0.5)
plt.show();
Примечание. Это работает в любой среде IPython (например, Jupyter, Colab и т. д.).
Этот код работает хорошо, спасибо. Есть ли у вас идеи, как приостановить анимацию, скажем, при n=3?
Вы можете добавить if n == 3: input() в качестве последней строки внутри цикла и нажать Enter, чтобы продолжить.
Возможно, у кого-то, кто лучше знает блокноты Jupyter, есть другой ответ, но блокноты Jupyter не подходят для чего-то подобного. Лучшим вариантом будет использование подходящего механизма matplotlib для создания анимации: matplotlib.org/stable/users/explain/animations/animations.html.