2013-05-08 37 views
0

所以我有一個3D圖形,它是通過遍歷數據框來更新點的散點圖。我有它添加了一個新的點.1秒。這裏是我的代碼:make matplotlib draw()只顯示新點

ion() 
fig = figure() 
ax = fig.add_subplot(111, projection='3d') 
count = 0 
plotting = True 
while plotting: 
    df2 = df.ix[count] 
    count += 1 
    xs = df2['x.mean'] 
    ys = df2['y.mean'] 
    zs = df2['z.mean'] 
    t = df2['time'] 
    ax.scatter(xs, ys, zs) 
    ax.set_xlabel('X Label') 
    ax.set_ylabel('Y Label') 
    ax.set_zlabel('Z Label') 
    ax.set_title(t) 
    draw() 
    pause(0.01) 
    if count > 50: 
     plotting = False 
ioff() 
show() 

我怎樣才能得到它只顯示實時更新的圖上的新點。現在它從一個點開始,然後再添加另一個點,直到圖上總共有50個點。

所以我想要的是在圖上永遠不會有多於一個點,並且只有當它迭代時纔會改變這一點。我怎樣才能做到這一點?

回答

2
ion() 
fig = figure() 
ax = fig.add_subplot(111, projection='3d') 
count = 0 
plotting = True 
# doesn't need to be in loop 
ax.set_xlabel('X Label') 
ax.set_ylabel('Y Label') 
ax.set_zlabel('Z Label') 

lin = None 
while plotting: 
    df2 = df.ix[count] 
    count += 1 
    xs = df2['x.mean'] 
    ys = df2['y.mean'] 
    zs = df2['z.mean'] 
    t = df2['time'] 
    if lin is not None: 
     lin.remove() 
    lin = ax.scatter(xs, ys, zs) 
     ax.set_title(t) 
    draw() 
    pause(0.01) 
    if count > 50: 
     plotting = False 
ioff() 
show() 

原則上也可以使用普通plot代替scatter並更新循環中的數據,但3D更新可以是靠不住/可能需要在內部戳了一下。

+0

作爲記錄,'ax.set_title(t)'確實需要在循環中,因爲它可以讓我跟蹤時間。現在,點總是在中間,當我這樣做時,軸標籤會發生變化......我如何防止這種情況發生? – 2013-05-08 20:02:15

+0

@RyanSaxe opps,抱歉,沒有完全閱讀它在做什麼。恢復那一點。 – tacaswell 2013-05-08 20:50:07

+0

@RyanSaxe在解決問題時請接受答案 – tacaswell 2013-05-09 18:39:04