Как анимировать словарь данных (ie, как анимировать несколько трехмерных точек данных)? - PullRequest
0 голосов
/ 05 января 2020

Итак, допустим, у меня есть следующий словарь:

dictionary = {'a': [1,2,3], 'b':[4,2,5], 'c':[5,9,1]}

Таким образом, способ, которым я бы сделал один сюжет из всех линий 'a', 'b', 'c' был бы ( при условии, что фигура уже объявлена, и т. д. c.):

#half-setup for animation
lines = []
mass = list(dictionary.keys()) #I know this is redundant but my 'mass' variable serves another purpose in my actual program

for i in range(len(mass)): #create a list of line objects with zero entries
    a, = ax.plot([], [])
    lines.append(a)

#single plot
for i in dictionary:
    index = np.array(locations[i]) #convert to numpy
    ax.plot(index[:,0],index[:,1],index[:,2])
plt.show()

Итак, как я могу превратить это в анимированный 3D-график? Я уже пробовал plt.ion () и plt.pause (), но анимация мучительно медленная.

1 Ответ

0 голосов
/ 07 января 2020

Вот следующая общая реализация, которую я использовал, и она работает довольно хорошо (включает словари):

import matplotlib.animation as anim

#create regular 3D figure 'fig'

lines = []
for i in range(3): #create however many lines you want
    a, = ax.plot([],[],[]) #create lines with no data
    lines.append(a)

bodies = {i:[data] for i in lines} #where [data] is your x,y,z dataset that you have before hand and 'i' is your matplotlib 'line' object

def update(num):
    for i in bodies: #update positions of each line
        index = np.array(bodies[i])
        i.set_data(index[:,0][:num],index[:,1][:num])
        i.set_3d_properties(index[:,2][:num])

if __name__=='__main__':

    totalSteps = 1000 #can change

    ani = anim.FuncAnimation(fig, update, totalSteps, interval = 1)

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