Как нарисовать (оживить) случайный процесс с самого начала (python)? - PullRequest
0 голосов
/ 22 апреля 2019

Я хочу нарисовать случайный путь процесса из начала (0,0), который обновляется шаг за шагом. Я использовал анимацию matplotlib, но она рисует простую линию. Как нарисовать путь?

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

# Process simulation (Wiener process)
n = 1000
sd = np.sqrt(0.1)
w = np.zeros(n)
for i in range(n-1):
    w[i+1] = w[i] + np.random.normal(0, sd)


# Set up the figure, the axis, and the plot element to animate
fig = plt.figure()
ax = fig.add_subplot(111)    
ax.set_xlim([0, 1000])
ax.set_ylim([-50, 50])
th = np.linspace(0., n, n / 0.1, endpoint=False)
line, = ax.plot([],[],'b-', animated=True)
line.set_xdata(th)



# Animation function
def update(data):    
    line.set_ydata(data)
    return line,

def data_gen():
    t = -1
    while True:
        t +=1
        yield w[t]


# Call the animation
anim = animation.FuncAnimation(fig, update, data_gen, interval=10, blit=True)
plt.show()

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

В этом коде используется библиотека, которую я написал под названием celluloid .Под капотом он использует ArtistAnimation вместо FuncAnimation, что практически означает, что он не очень эффективно использует память.Этот код занял около минуты для запуска.На мой взгляд, код легче читать, но я определенно предвзят.

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from celluloid import Camera

n = 1000
w = np.cumsum(np.sqrt(0.1) * np.random.randn(n))
fig = plt.figure()
camera = Camera(fig)
for i in range(n):
    plt.plot(w[:i], color='blue')
    camera.snap()
anim = camera.animate(interval=10, blit=True)
anim.save('weiner.mp4')

enter image description here

0 голосов
/ 22 апреля 2019
  1. Создайте свои данные в отдельном скрипте.
  2. Сохраните эти данные в постоянно обновляемом .csv (я предпочитаю использовать панд)
  3. Запустить график в его собственной консоли, но настроить его для обновления на основе данных CSV (я бы использовал панды)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...