Subplot Animasi

Sep 14 2020

Saya mencoba menghidupkan subplot. Saya telah membuat subplot menggunakan matplotlib gridspecSaya ingin menganimasikannya. Saya mencoba menemukan solusi online tetapi tidak dapat memahami cara melanjutkan.

Tolong bantu.

Terima kasih sebelumnya

Di bawah ini adalah kodenya.

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import matplotlib.animation as animation



def create_plot():
    n=500
    x1 = np.random.normal(loc=0.0,scale=1,size=n)
    x2 = np.random.gamma(2.5,2,size=n)
    x3 = np.random.exponential(3.5,n)+8
    x4 = np.random.uniform(-2.5,5,size=n)
    arts = []
    gspec = gridspec.GridSpec(2, 2)
    topleft_histogram = plt.subplot(gspec[0, 0])
    topright_histogram = plt.subplot(gspec[1:, 0])
    lowerleft_histogram  = plt.subplot(gspec[0,1:])
    lowerright_histogram = plt.subplot(gspec[1:, 1:])
    y1 = topleft_histogram.hist(x1, density=True, bins=100)
    y2 = topright_histogram.hist(x2, density=True, bins=100)
    y3 = lowerleft_histogram.hist(x3, density=True, bins=100)
    y4 = lowerright_histogram.hist(x4, density=True, bins=100)
    arts = [y1, y2, y3, y4]
    return arts ## return the artists created by `plt.plot()`
create_plot()

Subplot yang akan dianimasikan

Jawaban

1 GirishDattatrayHegde Sep 14 2020 at 21:11

Menggunakan FuncAnimation dari matplotlib.animationAnda melakukan sesuatu seperti ini:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
     
# figsize as if required
fig = plt.figure(figsize=(7, 7))
topleft_histogram    = fig.add_subplot(221)
topright_histogram   = fig.add_subplot(222)
lowerleft_histogram  = fig.add_subplot(223)
lowerright_histogram = fig.add_subplot(224)


def create_plot(ith):
    print(ith)
    n=500

    topleft_histogram.clear()
    topright_histogram.clear()
    lowerleft_histogram.clear()
    lowerright_histogram.clear()

    x1 = np.random.normal(loc=0.0,scale=1,size=n)
    x2 = np.random.gamma(2.5,2,size=n)
    x3 = np.random.exponential(3.5,n)+8
    x4 = np.random.uniform(-2.5,5,size=n)

    y1 = topleft_histogram.hist(x1, density=True, bins=100)
    y2 = topright_histogram.hist(x2, density=True, bins=100)
    y3 = lowerleft_histogram.hist(x3, density=True, bins=100)
    y4 = lowerright_histogram.hist(x4, density=True, bins=100)
    return fig

n_frames = 2
anim = FuncAnimation(fig, create_plot, frames=np.arange(0, n_frames), interval=200)

anim.save('animation.gif', dpi=80, writer='imagemagick')

Animasi yang dihasilkan (hanya menghasilkan 2 frame):