Как сделать анимацию на разных значениях здесь? - PullRequest
0 голосов
/ 22 сентября 2018

Я написал код, который строит несколько точек и линий на плоскости xy.Он строит все для заданного значения n.Так что для разных я получаю желаемые участки.Но я хочу оживить эти графики для разных значений n, скажем, для n = 1, 2, ..., 100 .Но я не могу сделать эту анимацию.

Может ли кто-нибудь здесь помочь мне сделать это?Спасибо .. Я вставляю свой код здесь:

Мой код

import matplotlib as mpl
mpl.rc('text', usetex = True) 
mpl.rc('font', family = 'serif')
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle

fig = plt.subplots()
ax = plt.axes(xlim=(-1.2, 1.2), ylim=(-1.2, 1.2))

plt.gca().set_aspect('equal', adjustable='box')
plt.style.use(['ggplot','dark_background'])
plt.rcParams['figure.figsize'] = (12, 8)

n = 10 #I want to animate this n.
p = 2

for k in range(0,n,1):
    theta1 = np.pi + 2*k*np.pi / n
    theta2 = np.pi + 2*p*k*np.pi / n
    x, y = np.cos(theta1), np.sin(theta1)
    x1, y1 = np.cos(theta2), np.sin(theta2)
    plt.scatter(x, y, s=50, c='violet', zorder=3)
    plt.plot([x,x1], [y,y1], color = 'w')

circle = plt.Circle((0, 0), 1, color='c', fill=False, lw = 1)
ax.add_artist(circle)

#Customize the axes and gridlines:
ax.grid(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)
#TickMarks Customization:
ax.set_xticks([])
ax.set_yticks([])

#plt.savefig('nthRoots.png', format='png', dpi=1000,bbox_inches='tight')

plt.show()

Вывод Output

Можно ли анимировать n с разными значениями?

РЕДАКТИРОВАТЬ: Здесь я не имею только точечные графики ... поэтому я не могу понять, как сделать эту работу, используя эти ссылки ..!

Моя попытка

#Animation.
import matplotlib as mpl
mpl.rc('text', usetex = True) #for LaTex notation in the Plot
mpl.rc('font', family = 'serif')
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle
from matplotlib import animation, rc

rc('animation', html='html5')

fig = plt.subplots()
ax = plt.axes(xlim=(-1.2, 1.2), ylim=(-1.2, 1.2))
plt.gca().set_aspect('equal', adjustable='box')
plt.style.use(['ggplot','dark_background'])
plt.rcParams['figure.figsize'] = (12, 8)

p = 2

#Plotting Function:
def f(n):
    for k in range(0,n,1):
        theta1 = np.pi + 2*k*np.pi / n
        theta2 = np.pi + 2*p*k*np.pi / n
        x, y = np.cos(theta1), np.sin(theta1)
        x1, y1 = np.cos(theta2), np.sin(theta2)
        plt.scatter(x, y, s=50, c='violet', zorder=3)
        plt.plot([x,x1], [y,y1], color = 'w')

    circle = plt.Circle((0, 0), 1, color='c', fill=False, lw = 1)
    ax.add_artist(circle)

    #Customize the axes and gridlines:
    ax.grid(False)
    ax.spines['right'].set_visible(False)
    ax.spines['top'].set_visible(False)
    ax.spines['left'].set_visible(False)
    ax.spines['bottom'].set_visible(False)
    #TickMarks Customization:
    ax.set_xticks([])
    ax.set_yticks([])
    plt.show()

#Now I try to define a function for animating n in f(n)
def animate(n):
    f(n)

anim = animation.FuncAnimation(fig, animate,
                           frames=100, interval=100, blit=True)
#anim.save('Wave.mp4', writer = 'ffmpeg', fps = 2, dpi=500,extra_args=['-vcodec', 'libx264'])

Это все, что у меня было ... Но эта идея не сработала ... Думаю, мне нужно правильно определить animate(n).Любое предложение...!спасибо.

1 Ответ

0 голосов
/ 22 сентября 2018

Несколько проблем в вашем коде (большинство из них не связаны с анимацией)

  • rcParams необходимо определить до создания фигуры
  • plt.subplots возвращает кортеж figure иaxes.
  • Анимация должна возвращать последовательность объектов художника при использовании блиттинга.Вы можете отключить его, хотя
  • plt.show() следует вызывать один раз в конце скрипта.

Исправление для тех, кого вы получаете

import matplotlib as mpl
mpl.rc('font', family = 'serif')
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle
from matplotlib import animation, rc

plt.rcParams['figure.figsize'] = (12, 8)
plt.style.use(['ggplot','dark_background'])

fig, ax = plt.subplots()


p = 2

#Plotting Function:
def f(n):
    ax.clear()
    ax.set(xlim=(-1.2, 1.2), ylim=(-1.2, 1.2))
    ax.set_aspect('equal', adjustable='box')

    for k in range(0,n,1):
        theta1 = np.pi + 2*k*np.pi / n
        theta2 = np.pi + 2*p*k*np.pi / n
        x, y = np.cos(theta1), np.sin(theta1)
        x1, y1 = np.cos(theta2), np.sin(theta2)
        plt.scatter(x, y, s=50, c='violet', zorder=3)
        plt.plot([x,x1], [y,y1], color = 'w')

    circle = Circle((0, 0), 1, color='c', fill=False, lw = 1)
    ax.add_artist(circle)

    #Customize the axes and gridlines:
    ax.grid(False)
    ax.spines['right'].set_visible(False)
    ax.spines['top'].set_visible(False)
    ax.spines['left'].set_visible(False)
    ax.spines['bottom'].set_visible(False)
    #TickMarks Customization:
    ax.set_xticks([])
    ax.set_yticks([])


anim = animation.FuncAnimation(fig, f, frames=100, interval=100, blit=False)

plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...