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()
Example #2
0
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
Example #3
0
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
Example #4
0
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()
Example #6
0
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
Example #7
0
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()
Example #9
0
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