def tp_plot_traj(trajs,images,sample_int=1,particle_int=1,scaled=False,save=False,
cmap=plt.cm.copper):
'''
Convenience function to plot all trajs in a given dataframe
with scaled axes.
Optional settings for plotting every [sample_int] particle location and/or
every [particle_int] particle, useful for extremely large datasets.
'''
f, ax = plt.subplots(figsize=(15,15))
particles = np.sort(trajs['particle'].unique()[::particle_int])
trajs = trajs[trajs.particle.isin(particles)]
# initialize plot
# place ticks outside of plot to avoid covering image
# remove right and upper axes to simplify plot
# only plot ticks on the left and bottom of plot
ax.tick_params(axis='y', direction='out')
ax.tick_params(axis='x', direction='out')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# plot particle trajs leading up to current fram
if scaled:
x = trajs['x']/scale
y = trajs['y']/scale
else:
x = trajs['x']
y = trajs['y']
ax.imshow(np.flipud(images[-1]),alpha=0.5)
ax.scatter(x[::sample_int],y[::sample_int],
c=trajs['frame'][::sample_int],marker='o',
s=2, cmap=cmap,lw=0,
vmin=trajs.frame.min(),vmax=trajs.frame.max())
plt.axis('scaled')
if scaled:
ax.set_xlim([0,im_w/scale])
ax.set_ylim([0,im_h/scale])
ax.set_xlabel('Width [cm]')
ax.set_ylabel('Height [cm]')
else:
ax.set_xlim([0,im_w])
ax.set_ylim([0,im_h])
ax.set_xlabel('Width [px]')
ax.set_ylabel('Height [px]')
if save:
plt.savefig('%s_f%05ito%05i.png'%(prefix,trajs.frame.min(),
trajs.frame.max()),dpi=200,
bbox_inches='tight')
plt.close('all')