Animações de dispersão 3D Matplotlib
Estou fazendo gráficos de posições em um cluster em estrela, meus dados estão em um quadro de dados com posições x, y, z e um índice de tempo.
Eu sou capaz de produzir uma plotagem de dispersão 3D e estava tentando produzir uma plotagem rotativa - tive algum sucesso, mas lutei através da API de animação.
Se minha função "update_graph" retornar apenas um novo ax.scatter (), o antigo permanecerá plotado, a menos que eu reconstrua o gráfico inteiro. Isso parece ineficiente. Além disso, tenho que definir meu intervalo bastante alto ou minha animação "pula" todos os outros quadros, por isso diz que meu desempenho é bastante ruim. Finalmente, sou forçado a usar o "blit = False", pois não consigo obter um iterador para um gráfico de dispersão 3D. Aparentemente, o "graph.set_data ()" não funciona, e eu posso usar o "graph.set_3d_properties", mas isso me permite apenas novas coordenadas z.
Então, eu juntei um cluuge-- (os dados que eu usei estão emhttps://www.kaggle.com/mariopasquato/star-cluster-simulations role para baixo)
Também estou plotando apenas 100 pontos (data = data [data.id <100])
Meu código (de trabalho) é o seguinte:
def update_graph(num):
ax = p3.Axes3D(fig)
ax.set_xlim3d([-5.0, 5.0])
ax.set_xlabel('X')
ax.set_ylim3d([-5.0, 5.0])
ax.set_ylabel('Y')
ax.set_zlim3d([-5.0, 5.0])
ax.set_zlabel('Z')
title='3D Test, Time='+str(num*100)
ax.set_title(title)
sample=data0[data0['time']==num*100]
x=sample.x
y=sample.y
z=sample.z
graph=ax.scatter(x,y,z)
return(graph)
fig = plt.figure()
ax = p3.Axes3D(fig)
# Setting the axes properties
ax.set_xlim3d([-5.0, 5.0])
ax.set_xlabel('X')
ax.set_ylim3d([-5.0, 5.0])
ax.set_ylabel('Y')
ax.set_zlim3d([-5.0, 5.0])
ax.set_zlabel('Z')
ax.set_title('3D Test')
data=data0[data0['time']==0]
x=data.x
y=data.y
z=data.z
graph=ax.scatter(x,y,z)
# Creating the Animation object
line_ani = animation.FuncAnimation(fig, update_graph, 19,
interval=350, blit=False)
plt.show()