Manish Manish - 3 months ago 15
Python Question

How do I plot trajectory from points whose coordinates are known to me at several time instants?

I have the coordinates of say 10 points at different time levels and I wish to join those coordinates to make it look like a trajectory?

def euler_method(points, x_dot, y_dot, x1, x2, time_step, n_steps):
n_points = len(points[:, 0])
point_trajectory = np.zeros((n_points, 2, n_steps))
for i in range(0, n_steps):
point_trajectory[:, :, i] = points
f1 = sp.lambdify((x1, x2), x_dot, "numpy")
f2 = sp.lambdify((x1, x2), y_dot, "numpy")
u = f1(points[:, [0]], points[:, [1]])
v = f2(points[:, [0]], points[:, [1]])
points_new_x = points[:, [0]] + u*time_step
points_new_y = points[:, [1]] + v*time_step
points = np.hstack((points_new_x, points_new_y))
return point_trajectory


def plot_trajectory(points_at_diff_time) - Is what I want to create

I am not able to think how to represent it. Please suggest how to do it, preferably in matplotlib.

EDIT: Something like this - moving points with different coordinates at different times.

enter image description here

Answer
import numpy as np
import matplotlib.pyplot as plt

# make fake data to test with
pt = np.zeros((6, 2, 3)) # 6 points, (x,y), 3 timesteps
pt[:,0] = [-2,-1,1] # x=time, same for all

# set y values
pt[0,1] = [3,4,4.5]
pt[1,1] = [2,2.9,3.4]
pt[2,1] = [1,1.9,2.4]
pt[3,1] = [0,0.6,1.0]
pt[4,1] = [-1.5,-1.6,-1.6]
pt[5,1] = [-2.8,-3.7,-3.8]

# now plot: x and y are 2D
x = pt[:,0].T
y = pt[:,1].T

plt.plot(x, y)
plt.show()

resulting plot

If you want to smooth the lines, see here: http://stackoverflow.com/a/5284038/4323

Comments