def main(dataset='measurements.npy'): X = np.load(dataset, mmap_mode='r') print 'loaded', dataset, X.shape trial = X[0, 0, 0] fig = plt.figure() ax = util.axes(fig) lines = [ax.plot([], [], [], '.-', c='#111111')[0] for s in C.SKELETON] def init(): for l in lines: l.set_data([], []) l.set_3d_properties([]) return lines def draw(f): frame = trial[f % len(trial)] markers = frame[17:].reshape((-1, 4)) for i, l in enumerate(lines): x, y, z = np.array( [util.identity(frame, markers[m, :3]) for m in C.SKELETON[i] if markers[m, 3] > 0]).T l.set_data(x, z) l.set_3d_properties(y) #ax.view_init(30, 0.3 * f) fig.canvas.draw() return lines a = anim.FuncAnimation( fig, draw, init_func=init, frames=240, interval=10, blit=False) #a.save('/tmp/trial.mp4', fps=15, extra_args=['-vcodec', 'libx264']) util.set_limits(ax, center=(0, 0, 0)) plt.show()
def kde1(datasets, axis, bandwidth = None, npoints = 1001, xmin = None, xmax = None, xrange_ = None, axes = None): """ """ # Extract data data = util.extract_data(datasets, axis) titles = util.extract_title(datasets) xmin, xmax = util.set_limits(data, xmin, xmax, xrange_, axis) if bandwidth is None: bandwidth = util.default_bandwidth(axis, npoints, xmin, xmax) fig, ax = util.fig_ax(axes) fig._flowml_axis = (axis, ) xgrid = np.linspace(xmin, xmax, npoints) for (d, t) in zip(data, titles): den = kde.hat_linear(d, bandwidth, xmin, xmax, npoints) ax.plot(xgrid, den, label = t) ax.set_yscale(util.default_yscale(axis)) ax.set_xlabel(axis) ax.set_ylabel('Density Estimate') if len(data) > 1: ax.legend() else: ax.set_title(titles[0]) return fig
def kde1(datasets, axis, bandwidth=None, npoints=1001, xmin=None, xmax=None, xrange_=None, axes=None): """ """ # Extract data data = util.extract_data(datasets, axis) titles = util.extract_title(datasets) xmin, xmax = util.set_limits(data, xmin, xmax, xrange_, axis) if bandwidth is None: bandwidth = util.default_bandwidth(axis, npoints, xmin, xmax) fig, ax = util.fig_ax(axes) fig._flowml_axis = (axis, ) xgrid = np.linspace(xmin, xmax, npoints) for (d, t) in zip(data, titles): den = kde.hat_linear(d, bandwidth, xmin, xmax, npoints) ax.plot(xgrid, den, label=t) ax.set_yscale(util.default_yscale(axis)) ax.set_xlabel(axis) ax.set_ylabel('Density Estimate') if len(data) > 1: ax.legend() else: ax.set_title(titles[0]) return fig
def hist1(datasets, axis, bins=None, xmin=None, xmax=None, xrange_=None, axes=None): """One dimensional histograms. """ # Extract data data = util.extract_data(datasets, axis) titles = util.extract_title(datasets) xmin, xmax = util.set_limits(data, xmin, xmax, xrange_, axis) if bins is None: bins = util.bin_default(axis, xmin, xmax) fig, ax = util.fig_ax(axes) fig._flowml_axis = (axis, ) # Plotting preferences alpha = util.alpha(len(data)) # We do not use the Matplotlib API for histograms because we want to have transparent plots # Following example: http://matplotlib.org/examples/api/histogram_path_demo.html max_value = float('-inf') for (d, t) in zip(data, titles): (hist, bin_edges) = np.histogram(d, bins=bins, range=(xmin, xmax)) left = np.array(bin_edges[:-1]) right = np.array(bin_edges[1:]) # FIXES a bug in MPLD3 0.3 regarding NaNs in coordinates bottom = 1e-6 * np.ones(len(left)) top = bottom + hist XY = np.array([[left, left, right, right], [bottom, top, top, bottom]]).T barpath = matplotlib.path.Path.make_compound_path_from_polys(XY) # serves to get the current color base_line, = ax.plot(hist, alpha=0) patch = matplotlib.patches.PathPatch(barpath, facecolor=base_line.get_color(), edgecolor=base_line.get_color(), alpha=alpha) # Clear the unneeded line base_line.remove() patch.set_label(t) ax.add_patch(patch) max_value = max(max_value, top.max()) ax.set_xlim(xmin, xmax) ax.set_ylim(1, max_value) ax.set_xlabel(axis) ax.set_yscale(util.default_yscale(axis)) if len(data) > 1: ax.legend() else: ax.set_title(titles[0]) return fig
def main(dataset='measurements.npy'): data = np.load(dataset, mmap_mode='r') print 'loaded', dataset, data.shape fig = plt.figure() ax = util.axes(fig, 111) trial = data[15, 1, 5] for f in range(0, len(trial), 300): util.plot_skeleton(ax, trial[f], alpha=1) x, y, z = trial[:, TARGET].T ax.plot(x, z, y, 'o-', color='#111111', alpha=0.5) util.set_limits(ax, center=(0, 0, 1), span=1) ax.w_xaxis.set_pane_color((1, 1, 1, 1)) ax.w_yaxis.set_pane_color((1, 1, 1, 1)) ax.w_zaxis.set_pane_color((1, 1, 1, 1)) #plt.gcf().set_size_inches(12, 10) #plt.savefig('single-trial.pdf', dpi=600) plt.show()
def hist1(datasets, axis, bins = None, xmin = None, xmax = None, xrange_ = None, axes = None): """One dimensional histograms. """ # Extract data data = util.extract_data(datasets, axis) titles = util.extract_title(datasets) xmin, xmax = util.set_limits(data, xmin, xmax, xrange_, axis) if bins is None: bins = util.bin_default(axis, xmin, xmax) fig, ax = util.fig_ax(axes) fig._flowml_axis = (axis, ) # Plotting preferences alpha = util.alpha(len(data)) # We do not use the Matplotlib API for histograms because we want to have transparent plots # Following example: http://matplotlib.org/examples/api/histogram_path_demo.html max_value = float('-inf') for (d, t) in zip(data, titles ): (hist, bin_edges) = np.histogram(d, bins = bins, range = (xmin, xmax)) left = np.array(bin_edges[:-1]) right = np.array(bin_edges[1:]) # FIXES a bug in MPLD3 0.3 regarding NaNs in coordinates bottom = 1e-6*np.ones(len(left)) top = bottom + hist XY = np.array([[left,left,right,right], [bottom, top, top, bottom]]).T barpath = matplotlib.path.Path.make_compound_path_from_polys(XY) # serves to get the current color base_line, = ax.plot(hist, alpha = 0) patch = matplotlib.patches.PathPatch(barpath, facecolor = base_line.get_color(), edgecolor = base_line.get_color(), alpha = alpha) # Clear the unneeded line base_line.remove() patch.set_label(t) ax.add_patch(patch) max_value = max(max_value, top.max()) ax.set_xlim(xmin, xmax) ax.set_ylim(1, max_value ) ax.set_xlabel(axis) ax.set_yscale(util.default_yscale(axis)) if len(data) > 1: ax.legend() else: ax.set_title(titles[0]) return fig
def hist2(datasets, axis1, axis2, bins = None, xmin = None, xmax = None, ymin = None, ymax = None, range_ = None, axes = None, transform = None): datax = util.extract_data(datasets, axis1) datay = util.extract_data(datasets, axis2) titles = util.extract_title(datasets) try: xrange_ = range_[0] yrange_ = range_[1] except: xrange_ = None yrange_ = None xmin, xmax = util.set_limits(datax, xmin, xmax, xrange_, axis1) ymin, ymax = util.set_limits(datay, ymin, ymax, yrange_, axis2) if not isinstance(transform, (list, tuple)): transform = [transform, transform] scaling = [None, None] scaling[0], transform[0] = util.default_scaling(axis1, scaling = scaling[0], transform = transform[0]) scaling[1], transform[1] = util.default_scaling(axis2, scaling = scaling[1], transform = transform[1]) for index, d in enumerate(datax): datax[index] = transform[0](d) for index, d in enumerate(datay): datay[index] = transform[1](d) xmin_transformed, xmax_transformed = util.set_limits(datax) ymin_transformed, ymax_transformed = util.set_limits(datay) # Determine how many bins to use if bins is None: bins = [None, None] if isinstance(bins, int): bins = [bins, bins] bins = list(bins) bins[0] = util.bin_default(axis1, xmin, xmax, bins = bins[0]) bins[1] = util.bin_default(axis2, xmin, xmax, bins = bins[1]) fig, ax = util.fig_ax(axes) fig._flowml_axis = (axis1, axis2) # We do not use the Matplotlib API for histograms because we want to have transparent plots # Following example: http://matplotlib.org/examples/api/histogram_path_demo.html den_ = [] range_ = ((xmin_transformed, xmax_transformed),(ymin_transformed, ymax_transformed)) for (dx, dy) in zip(datax, datay): den, xedge, yedge = np.histogram2d(dx, dy, bins = bins, range = range_) den_.append(den) alpha = util.alpha(len(den_)) proxy = [] line_collections = [] levels = 10**np.arange(0,7) for den in den_: line, = ax.plot(0,0) ln = ax.imshow(den.T, cmap = make_cmap(line.get_color()), origin = 'lower', norm = matplotlib.colors.LogNorm(), extent = [xmin, xmax, ymin, ymax], interpolation = 'none', aspect = 'auto') line_collections.append(ln) proxy.append( plt.Rectangle((0,0),1,1,fc = line.get_color(),alpha = alpha)) line.remove() if len(datax) == 1: ax.set_title(titles[0]) elif len(datax) > 1: ax.legend(proxy, titles) ax.set_xlabel(axis1) ax.set_ylabel(axis2) ax.set_xscale(scaling[0]) ax.set_yscale(scaling[1]) return fig
def main(dataset='measurements.npy'): data = np.load(dataset, mmap_mode='r') print 'loaded', dataset, data.shape plots = list(range(N * N)) frames = [[] for _ in plots] for subj in data: for block in subj[1:]: for trial in block: if trial[0, C.col('trial-hand')] == C.right: for frame in trial: for i in plots: if within_region(frame, i): frames[i].append(frame) break u, v = np.mgrid[0:2 * np.pi:11j, 0:np.pi:7j] sphx = np.cos(u) * np.sin(v) sphy = np.sin(u) * np.sin(v) sphz = np.cos(v) fig = plt.figure() for i, postures in enumerate(frames): if not postures: continue if i != 2: continue postures = np.array(postures) for m in range(50): marker = postures[:, 17+m*4:17+(m+1)*4] drops = marker[:, 3] < 0 marker[drops, :3] = marker[~drops, :3].mean(axis=0) means = postures.mean(axis=0) stds = postures.std(axis=0) #ax = util.axes(fig, 111) #for frame in postures[::5]: # util.plot_skeleton(ax, frame, alpha=0.1) ax = util.axes(fig, 110 * N + i + 1) util.plot_skeleton(ax, means, alpha=1.0) for m in range(50): mx, my, mz = means[17+m*4:20+m*4] sx, sy, sz = stds[17+m*4:20+m*4] / 2 ax.plot_wireframe(sphx * sx + mx, sphz * sz + mz, sphy * sy + my, color=C.MARKER_COLORS[m], alpha=0.3) #tgtx, tgty, tgtz = postures.mean(axis=0)[ # C.cols('target-x', 'target-y', 'target-z')] #ax.plot([tgtx], [tgtz], [tgty], 'o', color='#111111') #for m in range(50): # marker = postures[:, 17 + 4 * m:17 + 4 * (m+1)] # position = marker.mean(axis=0) # size = marker.std(axis=0) # ax.plot_surface() util.set_limits(ax, center=(0, -0.5, 1), span=1) ax.w_xaxis.set_pane_color((1, 1, 1, 1)) ax.w_yaxis.set_pane_color((1, 1, 1, 1)) ax.w_zaxis.set_pane_color((1, 1, 1, 1)) ax.set_title(['Top Right', 'Top Left', 'Bottom Right', 'Bottom Left'][i]) #for m in range(50): # x, z, y = frame[m*4:m*4+3] # ax.text(x, y, z, str(m)) plt.gcf().set_size_inches(12, 10) #plt.savefig('reach-targets-with-variance.pdf', dpi=600) plt.show()
def hist2(datasets, axis1, axis2, bins=None, xmin=None, xmax=None, ymin=None, ymax=None, range_=None, axes=None, transform=None): datax = util.extract_data(datasets, axis1) datay = util.extract_data(datasets, axis2) titles = util.extract_title(datasets) try: xrange_ = range_[0] yrange_ = range_[1] except: xrange_ = None yrange_ = None xmin, xmax = util.set_limits(datax, xmin, xmax, xrange_, axis1) ymin, ymax = util.set_limits(datay, ymin, ymax, yrange_, axis2) if not isinstance(transform, (list, tuple)): transform = [transform, transform] scaling = [None, None] scaling[0], transform[0] = util.default_scaling(axis1, scaling=scaling[0], transform=transform[0]) scaling[1], transform[1] = util.default_scaling(axis2, scaling=scaling[1], transform=transform[1]) for index, d in enumerate(datax): datax[index] = transform[0](d) for index, d in enumerate(datay): datay[index] = transform[1](d) xmin_transformed, xmax_transformed = util.set_limits(datax) ymin_transformed, ymax_transformed = util.set_limits(datay) # Determine how many bins to use if bins is None: bins = [None, None] if isinstance(bins, int): bins = [bins, bins] bins = list(bins) bins[0] = util.bin_default(axis1, xmin, xmax, bins=bins[0]) bins[1] = util.bin_default(axis2, xmin, xmax, bins=bins[1]) fig, ax = util.fig_ax(axes) fig._flowml_axis = (axis1, axis2) # We do not use the Matplotlib API for histograms because we want to have transparent plots # Following example: http://matplotlib.org/examples/api/histogram_path_demo.html den_ = [] range_ = ((xmin_transformed, xmax_transformed), (ymin_transformed, ymax_transformed)) for (dx, dy) in zip(datax, datay): den, xedge, yedge = np.histogram2d(dx, dy, bins=bins, range=range_) den_.append(den) alpha = util.alpha(len(den_)) proxy = [] line_collections = [] levels = 10**np.arange(0, 7) for den in den_: line, = ax.plot(0, 0) ln = ax.imshow(den.T, cmap=make_cmap(line.get_color()), origin='lower', norm=matplotlib.colors.LogNorm(), extent=[xmin, xmax, ymin, ymax], interpolation='none', aspect='auto') line_collections.append(ln) proxy.append( plt.Rectangle((0, 0), 1, 1, fc=line.get_color(), alpha=alpha)) line.remove() if len(datax) == 1: ax.set_title(titles[0]) elif len(datax) > 1: ax.legend(proxy, titles) ax.set_xlabel(axis1) ax.set_ylabel(axis2) ax.set_xscale(scaling[0]) ax.set_yscale(scaling[1]) return fig