我正在繪製星團中的位置,我的數據在x,y,z位置以及時間索引的數據框中。Matplotlib三維散佈動畫
我能夠產生一個三維散點圖,並試圖產生一個旋轉的情節 - 我一直有點成功,但掙扎着通過動畫API。
如果我的「update_graph」函數只是返回一個新的ax.scatter(),舊的將保持繪製,除非我重建整個圖形。這似乎效率低下。另外,我必須將間隔設置得相當高,否則我的動畫會「跳過」其他任何一幀,所以它說我的表現相當糟糕。最後,我不得不使用「blit = False」,因爲我無法獲得3d散點圖的迭代器。顯然,「graph.set_data()」不起作用,我可以使用「graph.set_3d_properties」,但它只允許我使用新的z座標。
因此,我已拼湊一個cluuge--(i的數據採用的是在 https://www.kaggle.com/mariopasquato/star-cluster-simulations 滾動到下)
另外我只繪製100個點(數據=數據[data.id < 100])
我的(工作)的代碼如下:
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()
多數民衆贊成我所需要的 - 我知道重繪整個事情是不正確的,但它是我能工作的唯一事情。作爲一個「教導一個人去釣魚」的跟進,我搜索了matplot文檔,並且找不到_offsets3d的任何提及。我是否需要包含github和代碼本身以供將來參考? – RDS
這是一個很好的觀點。上面的解決方案使用_offsets3d這是一個私有方法(如前面的_所示)。那些沒有記錄。只有通過查看[源代碼](https://github.com/matplotlib/matplotlib)或在線查找使用示例才能找到它們。如果文檔沒有提供解決方案,我經常發現查看源代碼會很有幫助。不要忘記,問一個像你這樣的具體問題也有助於找到像_offsets3d這樣的隱藏寶石。 ;-)但是,由於私有函數在版本之間也可能會發生變化,因此通常應避免使用它們。 – ImportanceOfBeingErnest