2013-05-09 5 views
2

그래서 3D 라이브 업데이트 그래프가 있습니다! 한 번에 한 지점 만 표시하므로 지점의 움직임을 쉽게 추적 할 수 있습니다! 하지만 여기에 문제가 있습니다 :matplotlib 레이블이 변경된 3d 플롯

내가 무엇을 하던지 상관없이, 포인트는 항상 그래프의 중앙에 배치되고이를 수행하기 위해 축의 눈금이 변경됩니다. 요점에 대한 움직임을 보지 못해서 내 인생이 매우 어려워집니다. 여기

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
from pylab import * 
import time 
import pandas as pd 
import pickle 
def pickleLoad(pickleFile): 
    pkl_file = open(pickleFile, 'rb') 
    data = pickle.load(pkl_file) 
    pkl_file.close() 
    return data 
data = pickleLoad('/Users/ryansaxe/Desktop/kaggle_parkinsons/accelerometry/LILY_dataframe') 
data = data.reset_index(drop=True) 
df = data.ix[0:,['x.mean','y.mean','z.mean','time']] 
ion() 
fig = figure() 
ax = fig.add_subplot(111, projection='3d') 
count = 0 
plotting = True 
labels = range(-10,11) 
ax.set_xlabel('X Label') 
ax.set_ylabel('Y Label') 
ax.set_zlabel('Z Label') 
ax.set_yticklabels(labels) 
ax.set_xticklabels(labels) 
ax.set_zticklabels(labels) 
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'] 
    ax.set_title(t) 
    if lin is not None: 
     lin.remove() 
    lin = ax.scatter(xs, ys, zs) 

    draw() 
    pause(0.01) 
    if count > 100: 
     plotting = False 
ioff() 
show() 

데이터의 예는 다음과 같습니다 : 여기 내 코드는

 x.mean y.mean z.mean     time 
0 -1.982905 3.395062 8.558263 2012-01-18 14:00:03 
1 0.025276 -0.399172 7.404849 2012-01-18 14:00:04 
2 -0.156906 -8.875595 1.925565 2012-01-18 14:00:05 
3 2.643088 -8.307801 2.382624 2012-01-18 14:00:06 
4 3.562265 -7.875230 2.312898 2012-01-18 14:00:07 
5 4.441432 -7.907592 2.851774 2012-01-18 14:00:08 
6 4.124187 -7.854146 2.727229 2012-01-18 14:00:09 
7 4.199698 -8.135596 2.677706 2012-01-18 14:00:10 
8 4.407856 -8.133449 2.214902 2012-01-18 14:00:11 
9 4.096238 -8.453822 1.359692 2012-01-18 14:00:12 

그래서 눈금이보다는 너무 포인트 이동 고정되도록 나는 그것을 만들기 위해 무엇을 할 수 있는지 눈금이 바뀐다 고요?

답변

0

아마 축 범위를 일정하게 유지하고 싶을 것입니다. 이 작업은 예를 들어 axis()으로 수행 할 수 있습니다.

이러한 답변을 참조하십시오 : set_xlim, set_ylimset_zlim :
How to set axis range
y-axis limit
enforce axis range

+0

예, 그렇습니다.하지만 3D와 함께 사용하는 것은 아닙니다. –

3

Axes3D 객체 (당신의 ax 변수는) 다음과 같은 방법이있다. 이를 사용하여 축의 한계를 수정할 수 있습니다.

문서 : set_xlim를 사용

편집

, 등, 나를 위해 작동합니다. 당신은 기본적으로 설정되어 축 자동 스케일링을 전환 한 번 봐 가질 수 2

#!python2 

from mpl_toolkits.mplot3d import Axes3D 
from pylab import * 

data = [ 
    [-1.982905, 3.395062, 8.558263, '2012-01-18 14:00:03'], 
    [ 0.025276, -0.399172, 7.404849, '2012-01-18 14:00:04'], 
    [-0.156906, -8.875595, 1.925565, '2012-01-18 14:00:05'], 
    [ 2.643088, -8.307801, 2.382624, '2012-01-18 14:00:06'], 
    [3.562265, -7.875230, 2.312898, '2012-01-18 14:00:07'], 
    [4.441432, -7.907592, 2.851774, '2012-01-18 14:00:08'], 
    [4.124187, -7.854146, 2.727229, '2012-01-18 14:00:09'], 
    [4.199698, -8.135596, 2.677706, '2012-01-18 14:00:10'], 
    [4.407856, -8.133449, 2.214902, '2012-01-18 14:00:11'], 
    [4.096238, -8.453822, 1.359692, '2012-01-18 14:00:12'], 
] 

ion() 
fig = figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.set_xlabel('X Label') 
ax.set_ylabel('Y Label') 
ax.set_zlabel('Z Label') 
ax.set_xlim((-10, 11)) 
ax.set_ylim((-10, 11)) 
ax.set_zlim((-10, 11)) 

lin = None 
for x, y, z, t in data: 
    ax.set_title(t) 
    if lin is not None: 
     lin.remove() 
    lin = ax.scatter(x, y, z) 
    draw() 
    pause(0.1) 

ioff() 
show() 

편집 : 여기 내 코드입니다. 어쩌면 set_lim 메소드를 무시하고있는 것일 수 있습니다.

문서 :

+0

모두 여전히 똑같은 일이 일어나고 있습니다. –

+0

제한 설정은 저에게 효과적입니다. 예제를 추가했습니다. –

+0

정확한 코드를 시도했지만 여전히 수정되지 않았습니다 ... 포인트가 센터에 있으므로 움직임을 추적 할 수 없습니다 –

0

난 당신과 같은 거의 동일한 문제로 달렸다. 나는 매번이있는 한계를 재설정 느낌이

while plotting: 
    df2 = df.ix[count] 
    count += 1 
    xs = df2['x.mean'] 
    ys = df2['y.mean'] 
    zs = df2['z.mean'] 
    t = df2['time'] 
    ax.set_title(t) 
    if lin is not None: 
     lin.remove() 
    lin = ax.scatter(xs, ys, zs) 
    ax.set_xlim((-10, 11)) 
    ax.set_ylim((-10, 11)) 
    ax.set_zlim((-10, 11)) 

    draw() 
    pause(0.01) 
    if count > 100: 
     plotting = False 

: 그래서 당신의 루프가 같을 것, 축이 새 지점을 추가 할 때마다 제한 재설정 나는 그것이 작동하도록하는 방법 중 하나를 발견하다 이것을 해결할 수있는 나쁜 방법으로, 나는 그것에 대해 question을 물었고, 대답을 찾을 수있을 것이다.원하는 것이 모두 작동하는 것을보고 싶다면 루프 내의 제한 변경이 트릭을 수행합니다.