Анимация Matplotlib не принимает патч круга в качестве фарга - PullRequest
0 голосов
/ 25 декабря 2018
import math
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.patches import Circle
from matplotlib import animation
from utils import rgb2hex
from tg import small_tg

matplotlib.rcParams["figure.figsize"]=(10, 5)
matplotlib.rcParams['toolbar'] = 'None'

fig, ax = plt.subplots()
ax.axis("equal")
ax.set_xlim(-10, 10)
ax.set_ylim(-5, 5)
ax.axis("off")

state_nodes = []
for state in small_tg["states"]:
    center = small_tg["states"][state]["graphic_properties"]["position"]
    state_nodes.append(Circle(center, 0.2, color = rgb2hex(255, 255, 255)))

def animate(i, state):
    print("&", i ,state)
    y = math.ceil((abs(i-100))*2.55)
    print(i, y, (abs(i-100))*2.55)
    state.set_color = rgb2hex(y,y,y)
    ax.add_artist(state)
    return state,

for state in state_nodes:
    print(state)
    animation.FuncAnimation(fig, animate, fargs = (state,), frames=201, interval=1, blit=True, repeat = False)

plt.show()

Оператор print внутри цикла for отображает состояния, однако оператор print внутри функции animate ничего не показывает, что означает, что функция не вызывается.Я не могу найти никаких логических ошибок.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 30 декабря 2018

Если вы хотите анимировать несколько элементов вместе, вы не должны запускать несколько FuncAnimation.Вместо этого, запустите одну анимацию и анимируйте всех художников в единственной функции * 1002. *.

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

import math
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
from matplotlib import animation
from matplotlib.colors import rgb2hex

fig, ax = plt.subplots()
ax.axis("equal")
ax.set_xlim(-10, 10)
ax.set_ylim(-5, 5)
ax.axis("off")

state_nodes = [Circle(center, 0.2, color='k') for center in np.random.normal(loc=0, scale=1, size=(5,2))]
for state in state_nodes:
    ax.add_artist(state)

def animate(i, states):
    c = (i/255)
    for state in states:
        dx,dy = np.random.normal(loc=0, scale=0.1, size=(2,))
        x,y = state.get_center()
        state.set_center((x+dx,y+dy))
        state.set_color(rgb2hex((c,c,c)))
    return states


ani = animation.FuncAnimation(fig, animate, fargs = (state_nodes,), frames=201, interval=25, blit=True, repeat = False)
plt.show()

enter image description here

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