Как показать одну фигуру в цикле в Python?

Я хочу показать цифру, которая вычисляется в цикле, скажем, с 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?

Возможно, у кого-то, кто лучше знает блокноты Jupyter, есть другой ответ, но блокноты Jupyter не подходят для чего-то подобного. Лучшим вариантом будет использование подходящего механизма matplotlib для создания анимации: matplotlib.org/stable/users/explain/animations/animations.ht‌​ml.

jared 29.06.2024 07:32

В matplotlib для этого есть несколько классов анимации: matplotlib.org/stable/users/explain/animations/animations.ht‌​ml

Tim Roberts 29.06.2024 07:34

Я рассматриваю некоторые варианты анимации для Jupyter, пользовательской версией которого является Colab, здесь. Я не знаю, каким версиям Jupyter они соответствуют, потому что это первый шаг, поскольку в зависимости от версии требуется специальная настройка. Текст на этой странице направляет вас к опциям.

Wayne 29.06.2024 15:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете имитировать анимацию , используя 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?

Margi 02.07.2024 06:46

Вы можете добавить if n == 3: input() в качестве последней строки внутри цикла и нажать Enter, чтобы продолжить.

Timeless 02.07.2024 12:32

Другие вопросы по теме