Обновление Python Matplotlib

Я попытался написать простой скрипт, который обновляет график рассеяния для каждого timestep t . Я хотел сделать это как можно проще. Но все, что он делает, – это открыть окно, где я ничего не вижу. Окно просто зависает. Возможно, это небольшая ошибка, но я не могу ее найти.

Формат data.dat имеет формат

  • Создание пользовательской цветовой карты с использованием matplotlib в python
  • Получение PySide для работы с matplotlib
  • почему у моего colorbar есть строки?
  • использование matlab meshgrid
  • Pyplot pcolormesh запутался, когда альфа не 1
  • Ошибка Matplotlib: «цифра включает в себя оси, которые не совместимы с tight_layout»
  •   xy Timestep 1 1 2 3 1 Timestep 2 6 3 2 1 

    (файл содержит только цифры)

     import numpy as np import matplotlib.pyplot as plt import time # Load particle positioins with open('//home//user//data.dat', 'r') as fp: particles = [] for line in fp: line = line.split() if line: line = [float(i) for i in line] particles.append(line) T = 100 numbParticles = 2 x, y = np.array([]), np.array([]) plt.ion() plt.figure() plt.scatter(x,y) for t in range(T): plt.clf() for k in range(numbP): x = np.append(x, particles[numbParticles*t+k][0]) y = np.append(y, particles[numbParticles*t+k][1]) plt.scatter(x,y) plt.draw() time.sleep(1) x, y = np.array([]), np.array([]) 

  • Общий режим обработки исключений в Python «Правильный путь»
  • Хранение вычисленных значений в объекте
  • Нормализация панд DataFrame по строке
  • Получить список всех кодировок. Python может кодировать
  • Ноутбук IPython запускает все ячейки на открытом
  • Python в Xcode 4+?
  • 2 Solutions collect form web for “Обновление Python Matplotlib”

    Самый простой, самый чистый способ сделать анимацию – использовать модуль matplotlib.animation .

    Поскольку график рассеяния возвращает matplotlib.collections.PathCollection , способ его обновления состоит в вызове метода set_offsets . Вы можете передать ему массив формы (N, 2) или список N 2-кортежей – каждый 2-кортеж является координатой (x,y) .

    Например,

     import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation T = 100 numbParticles = 2 particles = np.random.random((T,numbParticles)).tolist() x, y = np.array([]), np.array([]) def init(): pathcol.set_offsets([[], []]) return [pathcol] def update(i, pathcol, particles): pathcol.set_offsets(particles[i]) return [pathcol] fig = plt.figure() xs, ys = zip(*particles) xmin, xmax = min(xs), max(xs) ymin, ymax = min(ys), max(ys) ax = plt.axes(xlim=(xmin, xmax), ylim=(ymin, ymax)) pathcol = plt.scatter([], [], s=100) anim = animation.FuncAnimation( fig, update, init_func=init, fargs=(pathcol, particles), interval=1000, frames=T, blit=True, repeat=True) plt.show() 

    Наконец я нашел решение. Вы можете сделать это, просто используя этот скрипт. Я старался, чтобы это было просто:

     import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # Helps me to get the data from the file I want to plot N = 0 # Load particle positioins with open('//home//user//data.dat', 'r') as fp: particles = [] for line in fp: line = line.split() particles.append(line) # Create new Figure and an Axes which fills it. fig = plt.figure(figsize=(7, 7)) ax = fig.add_axes([0, 0, 1, 1], frameon=True) border = 100 ax.set_xlim(-border, border), ax.set_xticks([]) ax.set_ylim(-border, border), ax.set_yticks([]) # particle data p = 18 # number of particles myPa = np.zeros(p, dtype=[('position', float, 2)]) # Construct the scatter which we will update during animation scat = ax.scatter(myPa['position'][:, 0], myPa['position'][:, 1]) def update(frame_number): # New positions myPa['position'][:] = particles[N*p:N*p+p] # Update the scatter collection, with the new colors, sizes and positions. scat.set_offsets(myPa['position']) increment() def increment(): global N N = N+1 # Construct the animation, using the update function as the animation director. animation = FuncAnimation(fig, update, interval=20) plt.show() 
    Python - лучший язык программирования в мире.