def plot_trajectory(dt, hardness, orig_maps, out_dir): out_dir = os.path.join(out_dir, FLAGS.config_name+_get_suffix_str(), FLAGS.imset) fu.makedirs(out_dir) out_file = os.path.join(out_dir, 'all_locs_at_t.pkl') dt['hardness'] = hardness utils.save_variables(out_file, dt.values(), dt.keys(), overwrite=True) #Plot trajectories onto the maps plt.set_cmap('gray') for i in range(4000): goal_loc = dt['all_goal_locs'][i, :, :] locs = np.concatenate((dt['all_locs'][i,:,:], dt['all_locs'][i,:,:]), axis=0) xymin = np.minimum(np.min(goal_loc, axis=0), np.min(locs, axis=0)) xymax = np.maximum(np.max(goal_loc, axis=0), np.max(locs, axis=0)) xy1 = (xymax+xymin)/2. - 1.*np.maximum(np.max(xymax-xymin), 24) xy2 = (xymax+xymin)/2. + 1.*np.maximum(np.max(xymax-xymin), 24) fig, ax = utils.tight_imshow_figure(plt, figsize=(6,6)) ax.set_axis_on() ax.patch.set_facecolor((0.333, 0.333, 0.333)) ax.set_xticks([]) ax.set_yticks([]) all_locs = dt['all_locs'][i,:,:]*1 uniq = np.where(np.any(all_locs[1:,:] != all_locs[:-1,:], axis=1))[0]+1 uniq = np.sort(uniq).tolist() uniq.insert(0,0) uniq = np.array(uniq) all_locs = all_locs[uniq, :] ax.plot(dt['all_locs'][i, 0, 0], dt['all_locs'][i, 0, 1], 'b.', markersize=24) ax.plot(dt['all_goal_locs'][i, 0, 0], dt['all_goal_locs'][i, 0, 1], 'g*', markersize=19) ax.plot(all_locs[:,0], all_locs[:,1], 'r', alpha=0.4, linewidth=2) ax.scatter(all_locs[:,0], all_locs[:,1], c=5+np.arange(all_locs.shape[0])*1./all_locs.shape[0], cmap='Reds', s=30, linewidth=0) ax.imshow(orig_maps, origin='lower', vmin=-1.0, vmax=2.0, aspect='equal') ax.set_xlim([xy1[0], xy2[0]]) ax.set_ylim([xy1[1], xy2[1]]) file_name = os.path.join(out_dir, 'trajectory_{:04d}.png'.format(i)) print(file_name) with fu.fopen(file_name, 'w') as f: plt.savefig(f) plt.close(fig)