Встраивание анимации Matplotlib в Python (блокнот Google Colab) - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь показать GIF-файл в Google colab.research. Мне удалось сохранить файл в каталоге со следующим именем /content/BrowniamMotion.gif, но я не знаю, как показать этот GIF-файл в своем блокноте для представления.

Код для создания GIF, в случае, если кто-то может манипулировать им не для сохранения GIF, а для его анимации непосредственно в файле Google Colab,

# Other Brownian Motion
from math import *
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
import matplotlib.animation as animation

fig = plt.figure(figsize=(8,6))
ax = plt.axes(projection='3d')

N=10
#val1 = 500

x=500*np.random.random(N)
y=500*np.random.random(N)

z=500*np.random.random(N)

def frame(w):
    ax.clear()

    global x,y,z
    x=x+np.random.normal(loc=0.0,scale=50.0,size=10)
    y=y+np.random.normal(loc=0.0,scale=50.0,size=10)
    z=z+np.random.normal(loc=0.0,scale=50.0,size=10)


    plt.title("Brownian Motion")
    ax.set_xlabel('X(t)')
    ax.set_xlim3d(-500.0,500.0)
    ax.set_ylabel('Y(t)')
    ax.set_ylim3d(-500.0,500.0)
    ax.set_zlabel('Z(t)')


     ax.set_zlim3d(-500.0,500.0) 

        plot=ax.scatter

3D(x, y, z, c='r')


    return plot


anim = animation.FuncAnimation(fig, frame, frames=100, blit=False, repeat=True)

anim.save('BrowniamMotion.gif', writer = "pillow", fps=10 )  

Извините, если этот вопрос неверный, задан. Я новичок в Python и использую исследование колаба.

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

Для Colab проще всего использовать 'jshtml' для отображения анимации matplotlib.

Вам необходимо установить его с помощью

from matplotlib import rc
rc('animation', html='jshtml')

Затем просто введите свой анимационный объект. Он отобразит себя

anim

Вот выполнимый колаб вашего кода.

Имеет ползунок, по которому вы можете бегать взад и вперед в любой момент времени.

0 голосов
/ 08 апреля 2020

Используя тех же авторов git хранилище кажется, что у нас есть решение встроить графики в GIF-файлы ( Сохранить Matplotlib Animations как GIF-файлы ).

#!apt install ffmpeg
#!brew install imagemagick

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

from matplotlib import animation, rc
from IPython.display import HTML, Image # For GIF

rc('animation', html='html5')
np.random.seed(5)


# Set up formatting for the movie files
Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1800)


def generateRandomLines(dt, N):
    dX = np.sqrt(dt) * np.random.randn(1, N)
    X = np.cumsum(dX, axis=1)

    dY = np.sqrt(dt) * np.random.randn(1, N)
    Y = np.cumsum(dY, axis=1)

    lineData = np.vstack((X, Y))

    return lineData


# Returns Line2D objects
def updateLines(num, dataLines, lines):
    for u, v in zip(lines, dataLines):
        u.set_data(v[0:2, :num])

    return lines

N = 501 # Number of points
T = 1.0
dt = T/(N-1)


fig, ax = plt.subplots()

data = [generateRandomLines(dt, N)]

ax = plt.axes(xlim=(-2.0, 2.0), ylim=(-2.0, 2.0))

ax.set_xlabel('X(t)')
ax.set_ylabel('Y(t)')
ax.set_title('2D Discretized Brownian Paths')

## Create a list of line2D objects
lines = [ax.plot(dat[0, 0:1], dat[1, 0:1])[0] for dat in data]


## Create the animation object
anim = animation.FuncAnimation(fig, updateLines, N+1, fargs=(data, lines), interval=30, repeat=True, blit=False)

plt.tight_layout()
plt.show()

# Save as GIF
anim.save('animationBrownianMotion2d.gif', writer='pillow', fps=60)

Image(url='animationBrownianMotion2d.gif')
## Uncomment to save the animation
#anim.save('brownian2d_1path.mp4', writer=writer)

enter image description here

0 голосов
/ 08 апреля 2020

Проверьте эту ссылку, используя HTML, чтобы заставить его работать http://louistiao.me/posts/notebooks/embedding-matplotlib-animations-in-jupyter-notebooks/.

Я не вставил ссылку, а вместо этого вставил HTML видео, которое получил это на работу.

# Other Brownian Motion
from math import *
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
import matplotlib.animation as animation
from IPython.display import HTML

fig = plt.figure(figsize=(8,6))
ax = plt.axes(projection='3d')

N=10
val1 = 600

x=val1*np.random.random(N)
y=val1*np.random.random(N)
z=val1*np.random.random(N)

def frame(w):
    ax.clear()

    global x,y,z
    x=x+np.random.normal(loc=0.0,scale=50.0,size=10)
    y=y+np.random.normal(loc=0.0,scale=50.0,size=10)
    z=z+np.random.normal(loc=0.0,scale=50.0,size=10)


    plt.title("Brownian Motion")
    ax.set_xlabel('X(t)')
    ax.set_xlim3d(-val1,val1)
    ax.set_ylabel('Y(t)')
    ax.set_ylim3d(-val1,val1)
    ax.set_zlabel('Z(t)')
    ax.set_zlim3d(-val1,val1) 

    plot=ax.scatter3D(x, y, z, c='r')


    return plot


anim = animation.FuncAnimation(fig, frame, frames=100, blit=False, repeat=True)

anim.save('BrowniamMotion.gif', writer = "pillow", fps=10 )
HTML(anim.to_html5_video())

По сути, все, что мы слышали, это добавление

from IPython.display import HTML к преимулятору, а затем добавление строки HTML(anim.to_html5_video()). Этот код затем создает видео и сохраняет GIF.

...