So I have a 3d live-updating graph! it only shows one point at a time so I can easily track the motion of the point! But here is the problem:
No matter what I seem to do, the point is always placed in the center of the graph and the tick marks on the axis change in order to do that. This makes my life very difficult because I don't see the motion on the point. Here is my code:
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()
here is an example of the data:
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
So what can I do to make it so that the tick marks are fixed so the point moves rather than the tick marks changing?